【发布时间】:2010-09-17 16:07:51
【问题描述】:
在 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
那么,如果两者都是 stdcalls,我必须如何使用 cdecl 投射第 2 面? 还是我没有得到什么?
【问题讨论】:
-
我的回答在您编辑后仍然有效,int 和 INT_PTR 在 64 位版本中非常不同!
-
如果您只检查“响应”选项卡,请在下面查看我的编辑。
标签: c++ c windows visual-studio 64-bit