现场:
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下动态库和静态库的总结>>.
关于以dll调用dll的几个小问题
最新推荐文章于 2023-03-21 09:25:23 发布