Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 一个DLL可以调用/加载另一个DLL吗?_C++_Windows_Dll - Fatal编程技术网

C++ 一个DLL可以调用/加载另一个DLL吗?

C++ 一个DLL可以调用/加载另一个DLL吗?,c++,windows,dll,C++,Windows,Dll,我想从我自己的DLL调用一些第三方DLL例程。我只是不知道如何在C++中这样做。p> LoadLibrary和GetProcAddress是您的朋友之一……通常您通过项目中的导出库链接到DLL。然后,只要DLL在运行时位于程序的路径中,程序就可以调用DLL函数 通过手动加载DLL并获取所需的函数地址,也可以避免所需函数的链接时间解析(但需要做更多的工作),但如果第三方DLL支持常用的链接时间机制,则不需要这样做。您可以使用或在DLL中使用与在可执行文件中相同的方式。唯一的限制是不要从DllMai

我想从我自己的DLL调用一些第三方DLL例程。我只是不知道如何在C++中这样做。p> LoadLibrary和GetProcAddress是您的朋友之一……

通常您通过项目中的导出库链接到DLL。然后,只要DLL在运行时位于程序的路径中,程序就可以调用DLL函数


通过手动加载DLL并获取所需的函数地址,也可以避免所需函数的链接时间解析(但需要做更多的工作),但如果第三方DLL支持常用的链接时间机制,则不需要这样做。

您可以使用或在DLL中使用与在可执行文件中相同的方式。唯一的限制是不要从
DllMain
函数调用
LoadLibrary
,以避免死锁。

如果此dll有.lib文件,您只需将其添加到链接器输入并静态导入其函数即可。如果没有,则有一些工具可以从.dll生成.lib文件

您还可以使用
LoadLibrary
GetProcAddress
动态导入函数

MSDN说您不能从DllMain调用LoadLibrary。但在大多数情况下,没有什么坏事发生。

当然。它是什么类型的DLL?导入库是合适的,只要在应用程序启动之前可以安全地假定.DLL存在。否则它需要LoadLibrary()等@seand-sure。我认为99%的情况是链接到导出库,并在运行时将DLL设置到位。这取决于有问题的图书馆是否有这个,仅此而已。大多数写得好的人都是这样做的。不确定99%左右,但可能是80-90%。如果链接到计算机上可能不存在的dll,则会出现此问题。(如mapi32.dll)。如果您链接为导入库,则应用程序将在启动时呈现用户不友好的对话框。但是,如果您动态链接,您可以提供更友好的响应,并可能在降级模式或其他模式下运行。