我面临的问题基本上在这里描述,即:
- 我有一个使用第三方进程内 COM 组件 dll 的 DLL。
- 我想将免注册 COM 与该进程内组件一起使用。
- 我想在此 DLL(而不是主 EXE(中嵌入和使用 manfest,以便我可以以无注册的方式使用第三方组件。
- 我从组件使用的接口是通过调用
CoCreateInstance
激活的。 - 第三方 COM 组件没有任何进一步的 (COM( 依赖项,并且不依赖于或需要隔离。
我看到简单地将清单嵌入我的 DLL 是行不通的,如链接问题中所述,我需要手动切换激活上下文。
我不明白的是何时何地需要切换激活上下文:我只需要将CoCreateInstance
的调用包装在类似 CActCtxActivator ScopedContext
(*( 中的内容中,还是需要将所有调用包装到第三方组件中?(据我了解,这是ISOLATION_AWARE_ENABLED
应该提供帮助的。
那么,在使用免注册 COM 时,需要在哪里切换激活上下文?
<小时 />(*( : 或(**( 或其他任何内容。AFX_MANAGE_STATE(AfxGetStaticModuleState());
(**(:实际上,AFX_MANAGE_STATE
曾经工作过,但在"较新"的 MFC 版本中不再工作。例如,请参阅VS2012:删除了对MFC中活动上下文切换的支持?
我们从 MFC 中删除了所有激活上下文支持,因为我们.... 我们使用窗户MFC 本身内部的隔离感知 API。
发布者: Pat Brenner, 视觉C++图书馆 开发: 星期三, 六月 05, 2013 11:10 下午
你只需要包装对CoCreateInstance
的调用,因为第三方组件没有其他依赖项。
如果它有其他依赖项,则需要将调用包装到第三方组件中。