C++:在 MSVC 中使用 __stdcall 回调 typedef [英] C++: Callback typedefs with __stdcall in MSVC
问题描述
这个类型定义:
typedef DWORD WINAPI
(* CM_Open_DevNode_Key)(DWORD, DWORD, DWORD, DWORD, PHKEY, DWORD);
在 BorlandCpp 中编译得很好,但是,当我在 msvc 中编译它时,我必须删除 WINAPI
(这只是 __stdcall
的别名):
compiles fine in BorlandCpp, however, when I compile it in msvc I have to remove WINAPI
(which is just an alias for __stdcall
):
typedef DWORD
(* CM_Open_DevNode_Key)(DWORD, DWORD, DWORD, DWORD, PHKEY, DWORD);
为什么会这样?我可以安全地删除 WINAPI 部分吗?
Why is this happening? Can I remove the WINAPI part safely?
更新:我必须从 typedef 中删除WINAPI",否则我得到 p>
Update: I had to remove "WINAPI" form the typedef, otherwise I got
error C2059: syntax error : '('
为线路.
你能告诉我为什么 Borland 可以用WINAPI"编译它而 Msvc 不能?
推荐答案
我相信在 VC++ 上,您需要将调用约定放在 () 的内部 这是一个 example 在函数指针 typedef 中使用调用约定.
I believe on VC++ you need to put the calling convention inside the ()'s Here's an example on MSDN of using a calling convention inside a function pointer typedef.
typedef DWORD (WINAPI * CM_Open_DevNode_Key)(DWORD, DWORD, DWORD, DWORD, PHKEY, DWORD);
这应该编译没有问题.
这篇关于C++:在 MSVC 中使用 __stdcall 回调 typedef的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!