我需要在哪里切换激活上下文



我面临的问题基本上在这里描述,即:

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

我看到简单地将清单嵌入我的 DLL 是行不通的,如链接问题中所述,我需要手动切换激活上下文。

我不明白的是何时何需要切换激活上下文:我只需要将CoCreateInstance的调用包装在类似 CActCtxActivator ScopedContext (*( 中的内容中,还是需要将所有调用包装到第三方组件中?(据我了解,这是ISOLATION_AWARE_ENABLED应该提供帮助的。

那么,在使用免注册 COM 时,需要在哪里切换激活上下文?

<小时 />

(*( : AFX_MANAGE_STATE(AfxGetStaticModuleState()); (**( 或其他任何内容。

<小时 />

(**(:实际上,AFX_MANAGE_STATE曾经工作过,但在"较新"的 MFC 版本中不再工作。例如,请参阅VS2012:删除了对MFC中活动上下文切换的支持?

我们从 MFC 中删除了所有激活上下文支持,因为我们.... 我们使用窗户MFC 本身内部的隔离感知 API。

发布者: Pat Brenner, 视觉C++图书馆 开发: 星期三, 六月 05, 2013 11:10 下午

你只需要包装对CoCreateInstance的调用,因为第三方组件没有其他依赖项。

如果它有其他依赖项,则需要将调用包装到第三方组件中。

最新更新