我需要从另一个DLL中加载一个DLL。诱惑是将它加载到DllMain中,但已经有令人信服的文档说明它是一个“坏主意”。有从另一个DLL中加载DLL的最佳做法吗?
冒着问一个不是很具体的问题:是否有从另一个DLL加载DLL的最佳做法?
在我们当前的项目中,我们的主DLL有一个类。我从该类的构造函数中加载第二个DLL。但是,由于该类可以在DLL中多次实例化,因此我在其周围保留一个变量以指示是否先前加载了DLL,以便不再次调用LoadLibrary。这不知何故不觉得这是一个好的解决方案,因此我的问题。
对于它的价值,你的解决方案根本不算什么 - 这是非常普遍的。这是一个简单而优雅的方法来解决这个问题,而不需要在DLL中增加一些额外的初始化函数。我会把它放在像'EnsureOtherDLLLoaded'之类的函数中。 – tenfour
你的解决方案很好。事实上,你甚至不需要跟踪它是否已经被加载。在这个过程中再次调用LoadLibrary是很好的。 Windows将为该库保留引用计数,并且不会卸载它,直到FreeLibrary调用的次数与LoadLibrary调用的次数相匹配。 –