C++中调用DLL中的函数...

喝喝喝 2011-08-23 02:40:08
Windows提供的DLL是C语言写,大部分是WINAPI 的调用约定,也就是__stdcall。
C++默认的调用约定是_cdecl,以MessageBox函数为例,我在MessageBox所在的头文件函数中找到了,

#ifdef __cplusplus
extern "C" {
#endif
.......

int
WINAPI
MessageBoxExA(
HWND hWnd ,
LPCSTR lpText,
LPCSTR lpCaption,
UINT uType,
WORD wLanguageId);

................
#ifdef __cplusplus
}
#endif

所以DLL可以在C和C++中通用...所以__cplusplus应该是在写C++程序时被定义了,在什么地方,怎么都找不到呢.....

我觉得应该出现在编译器的某个设置中..或者在编译器中定义别的字符AAAA,再在包含的头文件中
#ifdef AAA
#define __cplusplus
翻了编译器的设置和但是搜了整个头文件都没找到.....

...全文
141 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
喝喝喝 2011-08-23
  • 打赏
  • 举报
回复
谢谢hiroyukki....
确实是内置宏......
这里有介绍http://edu.codepub.com/2010/1015/26394.php
贪食蛇男 2011-08-23
  • 打赏
  • 举报
回复
哦,回答的有点牛头不对马嘴……
__cplusplus 应该是编译器内置宏吧
贪食蛇男 2011-08-23
  • 打赏
  • 举报
回复
你理解不对。
默认的调用约定是可以在项目属性里调的。

#ifdef __cplusplus
extern "C"
{
#endif

这种宏是为了使你的符号在C++中按C的方式进行修饰。
你可以搜下“符号修饰”。
因为C和CPP符号修饰差别很大,如果你不加上述宏,则会出现链接时无法找到强符号的事。

如你定义一个函数
BOOL WINAPI TestFunction();
这个函数名,做为一个符号,在CPP中会被修饰成 ?TestFunction@@YGHXZ
在C中会被修饰成 _TestFunction@0 。
luciferisnotsatan 2011-08-23
  • 打赏
  • 举报
回复
可以在编译命令里定义一个宏。
/D宏名

64,661

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧