【发布时间】:2012-09-07 15:16:55
【问题描述】:
我需要从另一个 DLL 中加载一个 DLL。诱惑是在 DllMain 中加载它,但已经有令人信服的文档说这是一个“坏主意”。
冒着问一个不太具体的问题的风险:是否有从另一个 DLL 加载 DLL 的最佳实践?
在我们当前的项目中,我们的主 DLL 有一个类。我从该类的构造函数加载第二个 DLL。但是,由于该类可以在 DLL 中多次实例化,因此我保留了一个变量来指示 DLL 之前是否已加载,以免再次调用 LoadLibrary。不知何故,这似乎不是一个好的解决方案,因此我提出了问题。
【问题讨论】:
-
就其价值而言,您的解决方案一点也不差——它非常普遍。这是解决此问题的一种简单优雅的方法,无需在 DLL 中强加一些额外的初始化函数。我会把它放在像
EnsureOtherDLLLoaded这样的函数中。 -
您的解决方案很好。事实上,您甚至不必跟踪它是否已经加载。在该过程中再次调用 LoadLibrary 就可以了。 Windows 将保留库的引用计数,并且在 FreeLibrary 调用的数量与 LoadLibrary 调用的数量匹配之前不会卸载它。
标签: c++ visual-studio-2010 dll