extern "C" _declspec (dllexport)和_declspec (dllexport)的分别

extern   "C "只是表示这个能够被C语言调用,除了这个以外,没有什么更多含义。
由于C语言的编译器和C++的不一样,C++的会有个叫作函数名打散的机制,好比函数:int   add(int   a,int   b)在C++里面编译以后,就不是int   add(int   a,int   b),而是相似:int   add@WEROIUERH(int   a,int   b)的函数名,并且是随机的,若是不用extern   "C ",C语言根本无法调用,而在C++里面能够经过@的顺序来调用。函数

__declspec   (dllexport)输出函数的时候,用loadlibrary又有何不可?
关键是你要知道输出符号的名字。
由于c++中有函数重载,经过函数名并不能惟一肯定一个函数,因此使用c++方式编译函数时系统会在目标码中的内部修饰符中加入参数信息和返回值信息等, 这时候你能估算出正确的名称吗?
若是加了extern   "C "则是用c的方式编译,函数在目标码中的内部修饰符就是_函数名,只要用函数名就能够调用编译器

因为C++里面有函数重载,因此在编译的时候,编译器会在你写的,也就是你但愿导出的函数
后面加上一些关于参数的信息,也就是真正导出的函数名字和你想要的不同。
又因为C语言没有函数重载,因此用EXTERN "C"的意思就是告诉编译器不要按照C++那样修改函数
名称。
建议用模块定义文件 .def文件来写DLL,这样能够保证导出函数的纯净。编译

相关文章
相关标签/搜索