在XP 32位这条线与不问题编译然而在Vista中的64位这一行:stdcall over-ride by visual studio?
m_FuncAddr = ::GetProcAddress (somthing);
提供了以下错误
错误C2440: '=':不能从 'FARPROC' 转换'INT(__cdecl *)(无效)'
GetProcAddress的被定义为
WINBASEAPI FARPROC WINAPI GetProcAddress (somthing)
而且m_FuncAddr作为
int (WINAPI *m_FuncAddr)();
从我的理解都是STDCALL的。
为了避免我有错误把
m_FuncAddr = (int (__cdecl *)(void))::GetProcAddress(somthing);
我的问题:
如果m_FuncAddr和GetProcAddress都有stdcall调用为什么我要“召回”它的cdecl?
是否有可能VS项目设置的默认调用约定(设置为cdecl)超过了上面的assignemet语句?
在此先感谢!
[编辑]
要clerfiy问题:
在等式的一侧(说侧1)我有
int __stdcall * m_FuncAddr
在另一侧(侧2)
INT_PTR far __stdcall GetProcAddress
那么,如果两个都是stdcalls,那么我怎么才能用cdecl来抛出第二面呢? 或者我没有得到什么?
我的回答依然矗立你的编辑,诠释后INT_PTR在64位建立很大的不同! – 2008-10-17 01:53:19
如果您只查看“回复”标签,请参阅下面的编辑。 – 2008-10-21 01:04:11