关于以dll调用dll的几个小问题

现场:
1. 现有A.dll, A.lib, A.h
2. 建立一dll工程,生成B.dll, B.lib, 当然B.h也是avalibale的。其中B.dll的实现调用了A.dll的功能。

问题1: 程序C.exe调用B.dll,那么也需要A.dll吗? 
回答: 当然是需要的,它们都是动态库嘛。换句话说,C.exe的成功执行依赖于A.dll和B.dll都在PATH环境变量中,或者和C.exe在同一目录下,或者在Windows系统目录下,等等。当然,这2个dll可以在不同位置。关于exe是如何搜索dll的位置的,可参见上篇博文<<对Windows下动态库和静态库的总结>>。 

问题2: 建立C.exe的VS的solution/project,
       需要将A.h的路径加到Properties -> C++ -> General -> Additional Include Directories中去吗?
       需要在Properties -> Linker -> General -> Additional Library Directories中指明A.lib的路径吗?
       需要在Properties -> Linker -> Input ->Additional Dependencies中添加A.lib吗?
回答:以上都是不需要的,因为B.dll已经知道去哪里找A.dll中的相关导出功能了。换句话说,既然在建立B.dll的工程中,以上3步都已经做过了,就不需要在建立C.exe的工程中再做一遍了,即使B和C属于不同的solution。所以建立C.exe工程时,只需告诉该工程关于B.dll的信息即可。

问题3: Warning "inconsistent dll linkage" 是如何解决的?
回答: 这个warning纯属由忘记在Predecessor Definitions里面加上MYDLLTWO_EXPORTS宏所导致。加上即可解决。该宏是用来判断应该使用__declspec(dllexport)还是__declspec(dllimport)的。关于Predecessor Definitions和__declspec(dllexport/dllimport),可参见上篇博文<<对Windows下动态库和静态库的总结>>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值