解决 警告 inconsistent dll linkage

 

解决 警告  inconsistent dll linkage 

 

这个问题也是在写c++ dll 的过程中遇到的,有空的时候我来补充完整的代码。

 

终于有时间了,原来还有人遇到这个问题的,我来补充完整.

 

一、dll中的代码举例如下

 

 

 

如果你建一个项目,没有使用名称MYDLL,将这段代码,复制过去,就会提示  inconsistent dll linkage 警告。作者就是因为这样,才出的问题。

 

解决方法是:

 

在  工程--属性--配置属性--c/c++--预处理器--预处理定义, 增加MYDLL_EXPORTS,预定义,问题就可以解决了。(这个问题比较低级,作者是初用c++,所以才出现这种状况)

 

问题虽然解决了,但道理还不清楚呢.

 

我来解释一下原因:

 

PREDLL_API依赖于是否定义了MYDLL_EXPORTS来决定宏展开为__declspec(dllexport)还是__declspec(dllimport)

 

展开为__declspec(dllexport)是DLL编译时的需要,通知编译器该函数是需要导出供外部调用的。
展开为__declspec(dllimport)是给调用者用的,通知编译器,该函数是个外部导入函数。

 

对于工程设置里面的预定义宏,是最早被编译器看到的。所以当编译器编译DLL工程中的MYDLL.cpp时,因为看到前面有工程设置有定义MYDLL_EXPORTS,所以就把PREDLL_API展开为__declspec(dllexport)了。

 

这样做的目的是为了让DLL和调用者共用同一个h文件,在DLL项目中,定义MYDLL_EXPORTS,PREDLL_API就是导出;在调用该DLL的项目中,不定义MYDLL_EXPORTS,PREDLL_API就是导入。

 

 

这样就明白了吧!

 

不知本篇博文对你有没有帮助, 请多多支持!

 

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值