我面临的问题本质上是 described here ,即:

  • 我有一个使用第 3 方进程内 COM 组件 dll 的 DLL。
  • 我想在该进程内组件中使用免注册 COM。
  • 我想在这个 DLL 中嵌入并使用 list (而不是在主 EXE 中),以便我可以以无注册的方式使用 3rd 方组件。
  • 我在组件中使用的接口(interface)是通过调用 CoCreateInstance 激活的。
  • 第 3 方 COM 组件没有任何进一步的 (COM) 依赖项,并且不依赖或需要隔离。

  • 我发现简单地将 list 嵌入到我的 DLL 中是行不通的,如链接问题中所述,我需要手动切换 Activation Context
    我不明白的是我需要在何时何地切换激活上下文:我是否只需要将我对 CoCreateInstance 的调用包装在 CActCtxActivator ScopedContext (*) 之类的东西中,还是需要将所有调用包装到 3rd 方组件中? (据我所知, ISOLATION_AWARE_ENABLED 应该提供帮助。)
    那么,在使用免注册COM时,需要在哪里切换Activation Context呢?

    (*) : 或 AFX_MANAGE_STATE(AfxGetStaticModuleState()); (**) 或其他。

    (**):实际上,AFX_MANAGE_STATE 曾经可以工作,但不再适用于“较新”的 MFC 版本。见,例如VS2012: Removed support for active contexts switching in MFC? :

    最佳答案

    考虑到第 3 方组件没有其他依赖项,您只需要包装对 CoCreateInstance 的调用。

    如果它有其他依赖项,那么您需要将调用包装到 3rd 方组件中。

    关于winapi - 我需要在哪里切换激活上下文?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19299413/

    10-14 19:13
    查看更多