我面臨的問題本質上是described here,即:我需要在哪裏切換激活上下文?
- 我有一個使用第三方進程COM組件DLL中的DLL。
- 我想使用免註冊COM與該進程內組件。
- 我想嵌入和使用一個manfest到這個DLL(不是主要的EXE),這樣我就可以免費的方式使用第三方組件。
- 通過調用
CoCreateInstance
來激活組件中使用的接口。 - 第三方COM組件沒有任何進一步的(COM)依賴關係,不依賴或不需要隔離。
我發現只是將清單嵌入到我的DLL中不起作用,正如鏈接問題所述,我將需要手動切換Activation Context。
我不明白的是其中,當我需要切換激活上下文:我只需要我的電話換到CoCreateInstance
在類似CActCtxActivator ScopedContext
(*),或者我需要包裝所有來電進入第三方組件? (其中,據我瞭解什麼是ISOLATION_AWARE_ENABLED
應該幫助。)
因此,使用註冊免費COM的時候,你在哪裏需要切換Activation Context?
(*):
或者
(**)或什麼的。AFX_MANAGE_STATE(AfxGetStaticModuleState());
(**):其實,AFX_MANAGE_STATE
用來工作,但在 「新」 MFC版本確實不再。參見例如VS2012: Removed support for active contexts switching in MFC?:
我們刪除從MFC所有激活上下文的支持,因爲我們 ....我們在MFC本身內部使用Windows 隔離感知的API。
//通過貼:帕特布倫納的Visual C++庫開發:週三,2013年6月5日下午11:10
包裝'CoCreateInstance'只需要 –