2016-01-20 52 views
0

我知道我可以註冊我的COM對象以便在專用的dllhost.exe進程中託管inproc(通過標準com註冊)和outproc(通過dcom)。在我的進程中託管一個COM服務器

但是有可能讓我的COM對象運行在消費者(如dcom)的external process中,而不是託管在dllhost中,而不是我自己的進程?

我的目標是擁有一個運行我的邏輯的進程(windows服務),並且只需託管一個COM對象,以便其他進程可以使用COM對象的簡單CoCreateInstance與我進行通信。可能嗎?

請不要提供其他協議作爲答案,如果它不可能以這種方式託管COM是足夠的答案。

謝謝!

+4

COM具有DLL Surrogates的概念:https://msdn.microsoft.com/en-us/library/windows/desktop/ms695225.aspx。 dllhost.exe是默認的代理過程,您可以編寫自定義代碼:https://msdn.microsoft.com/en-us/library/windows/desktop/ms682432.aspx。但是當你說「託管一個COM對象,以便其他進程可以使用COM對象的簡單CoCreateInstance與我進行通信」時,你不需要所有(複雜)管道。只需託管並註冊Windows服務中的COM對象。它被稱爲Out-Of-Process COM服務器。 –

+0

當您使用'ATL項目'模板創建新的Visual Studio項目時,嚮導會要求您選擇是否將其託管在dll,exe或service exe中。這可能是最簡單的方法。請參閱第二段:https://msdn.microsoft.com/en-us/library/windows/desktop/ms683835(v=vs.85).aspx –

+0

@SimonMourier - 如果您將評論移至回覆我會標記是答案。不管怎麼說,還是要謝謝你!! – sternr

回答

0

COM有DLL Surrogates概念:

COM能夠創建一個可加載到 代理EXE進程DLL服務器。這結合了編寫DLL服務器 的便捷性與可執行實現的好處。開發工具,如 微軟的Visual Studio促進DLL服務器的寫作,而且本身就是 DLL服務器有限制

dllhost.exe,我們經常看到運行(一個或多個實例)的背景,其實是默認代孕過程,但你可以寫一個自定義的:Writing a Custom Surrogate。這是很少見的。但是,當你說「託管一個COM對象,以便其他進程可以使用COM對象的簡單CoCreateInstance與我進行通信」時,我不認爲你需要所有的管道(這可能相當複雜)。只需託管並註冊Windows服務中的COM對象。它被稱爲Out-Of-Process COM server而不是進程內COM服務器(DLL)。

相關問題