在 xp 32bit 中,此行编译没有问题,但在 vista 64bit 中,此行:
m_FuncAddr = ::GetProcAddress (somthing);
给出以下错误
错误 C2440:“=”:无法从“FARPROC”转换为“int (__cdecl *)(void)”
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语句?
提前致谢!
[编辑]
为了澄清这个问题:
在等式的一侧(比如第 1 侧)我有
int __stdcall * m_FuncAddr
在另一边(第 2 面)
INT_PTR far __stdcall GetProcAddress
So how is it that i have to cast side 2 with cdecl if both are stdcalls ? Or am I not getting something ?