Winapi 我需要在哪里切换激活上下文?

Winapi 我需要在哪里切换激活上下文?,winapi,com,side-by-side,regfreecom,activation-context-api,Winapi,Com,Side By Side,Regfreecom,Activation Context Api,我面临的问题本质上是: 我有一个使用第三方进程内COM组件DLL的DLL 我想在进程内组件中使用免注册COM 我想在这个DLL中嵌入并使用manfest(而不是在主EXE中),这样我就可以以无注册的方式使用第三方组件 我从组件使用的接口通过调用CoCreateInstance激活 第三方COM组件没有任何进一步的(COM)依赖关系,不依赖或需要隔离 我发现简单地将清单嵌入到我的DLL中是行不通的,正如链接问题中所描述的,我需要手动切换 我不明白的是何时何地需要切换激活上下文:我是否只需要将对

我面临的问题本质上是:

  • 我有一个使用第三方进程内COM组件DLL的DLL
  • 我想在进程内组件中使用免注册COM
  • 我想在这个DLL中嵌入并使用manfest(而不是在主EXE中),这样我就可以以无注册的方式使用第三方组件
  • 我从组件使用的接口通过调用
    CoCreateInstance
    激活
  • 第三方COM组件没有任何进一步的(COM)依赖关系,不依赖或需要隔离
我发现简单地将清单嵌入到我的DLL中是行不通的,正如链接问题中所描述的,我需要手动切换

我不明白的是何时何地需要切换激活上下文:我是否只需要将对
CoCreateInstance
的调用包装成(*)之类的格式,还是需要将所有调用包装到第三方组件中?(据我所知,这是应该帮助的。)

那么,当使用免注册COM时,您需要在哪里切换


(*):或
AFX_MANAGE_STATE(AfxGetStaticModuleState())(**)或其他


(**):实际上,
AFX\u MANAGE\u STATE
过去可以工作,但在“较新”的MFC版本中不再工作。参见,例如:

我们从MFC中删除了所有激活上下文支持,因为我们 .... 我们使用窗户 MFC本身内部具有隔离意识的API

//由Pat Brenner,Visual C++库开发:星期三,六月05, 2013 11:10PM


考虑到第三方组件没有其他依赖项,您只需要包装对
CoCreateInstance
的调用


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

包装
CoCreateInstance
就足够了“…那么您需要将调用包装到第三方…”-也就是说,那些本身需要切换激活上下文的调用,即那些将触发的调用(类似于)
CoCreateInstance
本身以及我希望通过切换上下文解决这些依赖关系的位置?@MartinBa这是正确的。我假设您并不总是知道哪些调用需要切换上下文,并且包装它们是最安全的。