这个类型定义:
typedef DWORD WINAPI
(* CM_Open_DevNode_Key)(DWORD, DWORD, DWORD, DWORD, PHKEY, DWORD);
在 BorlandCpp 中编译良好,但是,当我在 msvc 中编译它时,我必须删除 WINAPI
(它只是 __stdcall
的别名):
typedef DWORD
(* CM_Open_DevNode_Key)(DWORD, DWORD, DWORD, DWORD, PHKEY, DWORD);
为什么会这样?我可以安全地删除 WINAPI 部分吗?
更新:我必须从 typedef 中删除“WINAPI”,否则我会得到 p>
error C2059: syntax error : '('
为线。
你能告诉我为什么 Borland 可以用“WINAPI”编译它而 Msvc 不能吗?
最佳答案
我相信在 VC++ 上你需要将调用约定放在 () 的 Here's an example 中。关于在函数指针 typedef 中使用调用约定的 MSDN。
typedef DWORD (WINAPI * CM_Open_DevNode_Key)(DWORD, DWORD, DWORD, DWORD, PHKEY, DWORD);
编译应该没有问题。
关于C++:在 MSVC 中使用 __stdcall 回调 typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1297059/