【问题标题】:When and why use CoLoadLibrary?何时以及为何使用 CoLoadLibrary?
【发布时间】:2009-05-06 04:16:26
【问题描述】:

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

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

【问题讨论】:

    标签: windows com interop com-interop


    【解决方案1】:

    看看代码:

    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。

    【讨论】:

    • 是否有需要调用它的场景?
    • 没有我能想到的——CoLoadLibrary 曾经实现的功能似乎已被删除,所以这个例程真的只是兼容包。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-07-22
      • 2015-10-13
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2013-06-13
      • 2021-01-24
      • 2013-01-05
      相关资源
      最近更新 更多