extern   "C " 的作用

42 篇文章 0 订阅

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,这样可以保证导出函数的纯净。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值