#ifdef __cplusplus
extern "C" { //这是什么意思 ?????????????
#endif /* __cplusplus */
表示如果现在的编译环境是C++的话,让编译器生成C样式的函数名,也就是阻止编译器使用C++的方法进行函数名解析。
C++中因为函数可以重载:
int a(char)
int a(int)
int a(double)...
所以,在编译后的代码里,三个a()是不同的函数名如a_char_xxx,a_in_xxx,a_double_xxx等等.
要去掉后面的一大串符号只要在a()前面加上exter "C"即可
在DLL的对外接口函数中,必须用exter "C" 限制,否则,外部调用者根本不知道你的真正函数名.
1 VC6.0编译器可以按C++或C生成目标函数. 两者生成的目标符号表
并不一样. C方式是与原来标准C相兼容.
2 在DLL中的接口函数一般应按C方式编译而成. extern "C" 就是强
制指定. 如果不按这种方式指定.GetProcAddress(...)取出来的
就不对. 只能隐式连接.
extern "c" 的作用就是使得函数的定义名称和导出名称一致。