3

我面临的问题基本上在这里描述,即:

  • 我有一个使用第 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

4

1 回答 1

2

CoCreateInstance鉴于 3rd 方组件没有其他依赖项,您只需要将调用包装起来。

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

于 2013-10-10T15:32:28.317 回答