一个DLL能否调用/加载另一个DLL?

6

我想从我的DLL中调用一些第三方DLL例程,但我不确定如何在C++中实现。


当然可以。这是什么类型的DLL? - Hans Passant
4个回答

8

2

LoadLibrary和GetProcAddress是编程中的好帮手之一...


2
如果这个dll有.lib文件,你只需要将它添加到链接器输入中并静态导入其函数。如果没有,可以使用一些工具从.dll生成.lib文件。
另外,你也可以动态地导入函数,使用LoadLibraryGetProcAddress。MSDN说你不能在DllMain中调用LoadLibrary。但在大多数情况下不会出现问题。

1
通常情况下,您可以通过在项目中使用导出库链接到 DLL。 然后,如果在运行时DLL在程序路径中,DLL函数就可以被程序调用。
但是,也有可能(但需要更多的工作量)通过手动加载 DLL 并获取所需函数地址来避免链接时解析所需函数,但如果第三方 DLL 支持常规的链接时机制,则不应该采取这种方法。

只有在可以安全地假定.dll在应用程序启动之前已经存在时,导入库才是适当的。否则需要使用LoadLibrary()等函数。 - seand
@seand - 当然。我认为99%的情况是链接到导出库,并在运行时放置DLL,不过这取决于所涉及的库是否具有此功能。大多数编写良好的库都是这样做的。 - Steve Townsend
不确定是99%,但可能是80-90%。如果链接到可能不存在于计算机上的dll(例如mapi32.dll),这将是一个问题。如果作为导入库进行链接,您的应用程序将在启动时呈现一个用户不友好的对话框。但是,如果您动态链接,您可以给出更友好的响应,并且可能以降级模式运行或其他方式。 - seand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接