C++:在 MSVC 中使用 __stdcall 回调 typedef [英] C++: Callback typedefs with __stdcall in MSVC

查看:49
本文介绍了C++:在 MSVC 中使用 __stdcall 回调 typedef的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个类型定义:

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

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆