2013-10-08 28 views
5

我使用Windows運行時模板庫(WRL)創建了一個進程內經典COM DLL的示例:http://msdn.microsoft.com/en-us/library/vstudio/jj822931.aspx。我也能夠修改代碼來運行DLL作爲COM代理(包裝在DllHost.exe中)。使用Windows運行時間模板庫(WRL)的進程外經典COM EXE

但是,我找不到使用WRL創建進程外COM EXE的方法。在這裏有一個簡單的示例使用準系統COM API:http://www.codeproject.com/Articles/3173/A-simple-yet-debuggable-COM-skeleton-code,但我想知道如何利用WRL來簡化它。

謝謝。

+0

有什麼不對COM代孕? – sharptooth

+0

COM代理沒有錯。我只是好奇如何使用WRL實現超出COM COM EXE。 – nikoniko

+0

流程外COM是如此的痛苦,這是WCF發明的原因之一。 –

回答

3

是的,這是可能的。我只有一個工作。以下是需要的基礎知識,與實施一個進程內的coclass相比。

  • 使用WRL :: RuntimeClass實現您的coclass的方式與您爲pro-proc類使用的方法相同。 (https://msdn.microsoft.com/en-us/library/jj822931.aspx
  • 在你的主函數中,使用WRL創建一個模塊對象:: Module <OutOfProc> :: Create(),並在啓動時調用module.RegisterObjects(),module.UnregisterObjects()和module.Terminate )關機。
  • 您需要構建一個DLL來承載代理服務器:https://msdn.microsoft.com/en-us/library/windows/desktop/ms688707(v=vs.85).aspx
  • 靜態註冊:DO註冊您的代理存根的接口和CLSID。不要靜態註冊你的coclass。
  • 在客戶端中,當您調用CoCreateInstance時,請務必使用相應的CLSCTX。 (我用CLSCTX_ALL當託管模式並不是很重要的客戶。)

(我知道這是近4年時間,但我有這個星期同樣的問題。)

+0

謝謝,將確認下一次我需要再次與COM戰鬥:) – nikoniko

相關問題