【发布时间】:2009-05-06 04:16:26
【问题描述】:
CoLoadLibrary() 的描述说它与 LoadLibraryEx() 几乎相同 - 将 DLL 加载到进程中。 COM 类创建函数 - CoCreateInstance() 和 CoGetClassObject() - 都将必要的 DLL 加载到进程中。
那么为什么首先需要 CoLoadLibrary() 以及应该如何使用它?
【问题讨论】:
标签: windows com interop com-interop
CoLoadLibrary() 的描述说它与 LoadLibraryEx() 几乎相同 - 将 DLL 加载到进程中。 COM 类创建函数 - CoCreateInstance() 和 CoGetClassObject() - 都将必要的 DLL 加载到进程中。
那么为什么首先需要 CoLoadLibrary() 以及应该如何使用它?
【问题讨论】:
标签: windows com interop com-interop
看看代码:
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,因此这是一种确保未来兼容性的方法。
【讨论】: