C与C++对__declspec(dllimport)和__declspec(dllexport)标志符号不同处理


最近,需要使用mingw编译生成一个dll,供其他程序调用,当然需要自己先在mingw测试一下,


即自己编译自己调用,发现了使用C语言和C++语言,生成的dll中,函数的名字很不一样,


一般在C++语言中,生成的dl中l函数名字,会包括一些前缀和后缀,这些前缀和后缀分别反映了函数的返回值类型,

以及函数参数表。


在C语言中,生成的dll中函数名字则与代码中的函数名字一致。


也就是说,当你使用g++编译dll的时候, 你声明一个export类型函数如下:


__declspec(dllexport) int hello(int a,int b)


但是,如果你在使用这个生产的dll库的时候,你如下声明import函数类型:


extern “C” {

__declspec(dllimport) int hello(int a,int b);

}


编译器会报告一个链接的错误:


undefined reference to `_imp___Z5helloii'



由于,我在编程的时候,设计到C和C++写的函数,所以, 把C语言写的函数用extern “C” {} 包括起来,这样在C++语言


编写的程序中调用动态库时,就会出现链接的错误,因为两个语言各自指定了自己的函数名称。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值