我在哪里需要切换激活上下文?
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
。
如果它有其他依赖项,那么您需要将调用包装到第三方组件中。
以上是关于我在哪里需要切换激活上下文?的主要内容,如果未能解决你的问题,请参考以下文章