何时以及为何使用CoLoadLibrary?

时间:2009-05-06 04:16:26

标签: windows com interop com-interop

CoLoadLibrary()的描述说它与LoadLibraryEx()几乎完全相同 - 将DLL加载到进程中。 COM类创建函数 - CoCreateInstance()和CoGetClassObject() - 都会将必要的DLL加载到进程中。

那么为什么首先需要CoLoadLibrary()以及如何使用它?

2 个答案:

答案 0 :(得分:4)

看看代码:

mov     edi,edi
push    ebp
mov     ebp,esp
push    8
push    0
push    dword ptr [ebp+8]
call    dword ptr [ole32!_imp__LoadLibraryExW (71eb1214)]
pop     ebp
ret     8

所以它只是打电话:

LoadLibraryEx( FileName, NULL, LOAD_WITH_ALTERED_SEARCH_PATH ).

据推测,该例程仅用于向后兼容 - 它可能源于Win16。

答案 1 :(得分:1)

也许你在编写自己的regsvr32.exe?但JP的反汇编并不能真正支持我的猜测,因为你可以只使用LoadLibraryEx。也许在过去的日子里,微软计划在某天使用与常规DLL(D-COM?)不同的方式加载COM DLL,因此这是一种确保未来兼容性的方法。