CoLoadLibrary() 的描述说它与 LoadLibraryEx() 几乎相同 - 将 DLL 加载到进程中。COM 类创建函数 - CoCreateInstance() 和 CoGetClassObject() - 也都将必要的 DLL 加载到进程中。
那么为什么首先需要 CoLoadLibrary() 以及应该如何使用它?
CoLoadLibrary() 的描述说它与 LoadLibraryEx() 几乎相同 - 将 DLL 加载到进程中。COM 类创建函数 - CoCreateInstance() 和 CoGetClassObject() - 也都将必要的 DLL 加载到进程中。
那么为什么首先需要 CoLoadLibrary() 以及应该如何使用它?
看一下代码:
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。
也许如果您正在编写自己的 regsvr32.exe?但是 JP 的反汇编并不能真正支持我的猜测,因为你可以使用 LoadLibraryEx 代替。也许在过去,微软计划有一天以不同于常规 DLL(D-COM?)的方式加载 COM DLL,因此这是确保未来兼容性的一种方式。