【发布时间】:2013-10-18 10:16:54
【问题描述】:
我面临的问题本质上是described here,即:
- 我的 DLL 正在使用第 3 方进程内 COM 组件 dll。
- 我想将免注册 COM 与该进程内组件一起使用。
- 我想在这个 DLL 中(而不是在主 EXE 中)嵌入并使用一个 manfest,这样我就可以以无 reg 的方式使用第 3 方组件。
- 我在组件中使用的接口是通过调用
CoCreateInstance来激活的。 - 第 3 方 COM 组件没有任何进一步的 (COM) 依赖项,不需要依赖或隔离。
我发现简单地将清单嵌入到我的 DLL 中是行不通的,如链接问题中所述,我需要手动切换 Activation Context。
我不明白的是在哪里以及何时需要切换激活上下文:我是否只需要将我对CoCreateInstance 的调用包装成CActCtxActivator ScopedContext(*) 之类的东西,或者我需要将所有调用包装到第 3 方组件中吗? (据我所知,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
【问题讨论】:
-
包装
CoCreateInstance就足够了
标签: winapi com side-by-side regfreecom activation-context-api