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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我在哪里需要切换激活上下文?相关的知识,希望对你有一定的参考价值。

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

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

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

我不明白的是我需要切换激活上下文的地方和时间:我只需要在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中删除了所有激活上下文支持,因为我们....我们在MFC本身内部使用Windows隔离感知API。

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

答案

鉴于第三方组件没有其他依赖关系,您只需将调用包装到CoCreateInstance

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

以上是关于我在哪里需要切换激活上下文?的主要内容,如果未能解决你的问题,请参考以下文章

常用的几个JQuery代码片段

我在哪里更改此 Python 代码片段以将临时文件保存在 tmp 文件夹中?

[转]上下文切换

片段中的 getContext()

12个用得着的 JQuery 代码片段

Android中切换标签片段之间的延迟