我面临的问题基本上在这里描述,即:
- 我有一个使用第 3 方进程内 COM 组件 dll 的 DLL。
- 我想将免注册 COM 与该进程内组件一起使用。
- 我想在这个 DLL(而不是主 EXE)中嵌入并使用一个 manfest,以便我可以以无注册的方式使用第 3 方组件。
- 我从组件中使用的接口是通过调用来激活的
CoCreateInstance
。 - 第 3 方 COM 组件没有任何进一步的 (COM) 依赖项,并且不依赖或不需要隔离。
我看到简单地将清单嵌入到我的 DLL 中是行不通的,如链接问题中所述,我需要手动切换激活上下文。
我不明白的是我需要在何时何地切换激活上下文:我是否只需要将我的调用包装CoCreateInstance
在 (*) 之类的东西中CActCtxActivator ScopedContext
,还是需要将所有调用包装到第 3 方组件中?(据我所知,这ISOLATION_AWARE_ENABLED
是应该提供帮助的。)
那么,在使用免注册 COM 时,需要在哪里切换Activation Context呢?
(*) :或(**) 或其他。AFX_MANAGE_STATE(AfxGetStaticModuleState());
(**):实际上,AFX_MANAGE_STATE
以前可以工作,但在“较新”的 MFC 版本中不再有效。参见,例如VS2012:删除了对 MFC 中活动上下文切换的支持?:
我们从 MFC 中删除了所有激活上下文支持,因为我们......我们在 MFC 本身内部使用了 Windows 隔离感知 API。
// 发布者:Pat Brenner,Visual C++ 库开发:2013 年 6 月 5 日,星期三,晚上 11:10