2013-10-10 59 views
3

我面臨的問題本質上是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

+0

包裝'CoCreateInstance'只需要 –

回答

2

你只需要包裝,您的來電CoCreateInstance鑑於第三方組件具有沒有其他的依賴。

如果它有其他依賴項,那麼你需要將調用包裝到第三方組件中。

+0

「...那麼你需要將呼叫包裝到第三方......」 - 也就是說,那些本身需要交換激活上下文的呼叫,即那些呼叫會自己觸發(類似於)'CoCreateInstance',並且我希望通過切換的上下文來解決這些依賴關係? –

+1

@MartinBa這是正確的。我假設你並不總是知道哪些呼叫需要切換的上下文,並且將它們全部包裝起來是最安全的。 –