实例化dllmain() / DLL_PROCESS_ATTACH中允许的com对象

instancing com object allowed in dllmain() / DLL_PROCESS_ATTACH?

本文关键字:对象 com ATTACH PROCESS dllmain DLL 实例化      更新时间:2023-10-16

DLLMAIN()/DLL_PROCESS_ATTACH中加载dll可能会导致问题。但是COM Objects是否可以使用CoInitialize()/CoCreateInstance()实例化?

EDIT:问题是在这种情况下,创建COM实例是否会导致类似加载dll的错误?在我看来,加载dll和创建COM实例在某种程度上是相似的。

我不知道你这句话是从哪里来的,但听起来不太对。

你不应该把任何有意义的代码放到DllMain中。尤其是调用LoadLibrary的代码。许多Windows api将在底层调用LoadLibrary,因此最好避免在这里进行任何复杂的初始化。使用一个全局的c++对象(对于它的构造函数),或者更好,导出一个函数进行初始化。

进程内组件的CoCreateInstance最终将调用LoadLibrary或其变体之一。在DllMain中调用这个函数也不明智。