C++:在 MSVC 中使用 __stdcall 回调 typedef

标签 c++ visual-c++ typedef

这个类型定义:

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”,否则我会得到

 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/

相关文章:

c++ - C++ 复制保护 API

c++ - 具有不同参数 C++ 的工厂注册表

c - cvSeqPush 是如何工作的?

c++ - opencv BGR2GRAY 和 Pillow 转换函数之间的区别

c++ - 为什么使用 ostream 的字符串会导致 stackoverflow?

c++ - "compile as"设置为 'default' 时出现外部符号链接(symbolic link)错误

c++ - 在 native DLL 中嵌入多个同名资源 (RC) 文件

c++ - 函数指针语法

c++ - 如何转发声明我将使用 typedef 创建的类型?

c - C 中的 typedef struct 问题(非法使用此类型作为表达式)