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

时间:2013-10-10 15:01:52

标签: winapi com side-by-side regfreecom activation-context-api

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

  • 我有一个使用第三方进程内COM组件的DLL。
  • 我想在进程内组件中使用免注册COM。
  • 我想在这个DLL中嵌入并使用manfest(而不是主EXE),这样我就可以免费使用第三方组件。
  • 我通过调用CoCreateInstance来激活我在组件中使用的界面。
  • 第三方COM组件没有任何进一步的(COM)依赖关系,并且不依赖或需要隔离。

我看到只是将清单嵌入到我的DLL中不起作用,如链接问题中所述,我需要手动切换Activation Context

我不明白的是 where 以及当我需要切换激活上下文时:我是否只需将CoCreateInstance的呼叫包裹在CActCtxActivator ScopedContext之类的内容中( *),或者我需要将所有呼叫包装到第三方组件中? (据我所知,ISOLATION_AWARE_ENABLED应该提供帮助。)

那么,当使用免注册COM时,您需要在哪里切换Activation Context


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


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

  

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

     

//发布者:Pat Brenner,Visual C ++库开发:2013年6月5日星期三下午11:10

1 个答案:

答案 0 :(得分:2)

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

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