2011-05-19 67 views
2

我有一個在Visual Studio 6中編寫的舊的MFC應用程序。這將在某些時候在C#.NET中重寫。但是,在此之前,我必須爲現有應用程序編寫幾個新的Windows服務。其他人都是用ATL寫的。我更喜歡用C#.NET編寫這些新服務,以便在應用程序的其他部分被重寫時,這些都不需要。從C++應用程序調用C#.NET服務?

是否有可能從舊應用程序調用.NET窗口服務中託管的庫上的接口?如果是這樣,你能解釋一下嗎?

回答

4

當然。您正在尋找稱爲COM-Interop的.NET功能。

http://msdn.microsoft.com/en-us/library/kew41ycz%28v=vs.71%29.aspx

http://msdn.microsoft.com/en-us/magazine/cc163494.aspx

第二連桿具有ATL例子。

編輯: 基於在評論你的反饋,讓我對這個擴展...

啊 - 你說得對頁面上的示例。

第一個鏈接真的是你想要開始的所有細節。如果你遵循的聯繫,你會發現這個頁面:

「揭露.NET框架組件以COM」 http://msdn.microsoft.com/en-us/library/zsfww439%28v=vs.71%29.aspx

從本質上講,它只是一個應用的一系列屬性到您的類和屬性的事,然後在客戶端機器上生成相應的註冊表項(.NET有一個工具可以執行 - 請參閱:http://msdn.microsoft.com/en-us/library/bctyca52%28v=vs.71%29.aspx

我自己爲.NET項目需要從VC++和/或VB6。

其他一些鏈接,可能會感興趣:

http://www.codeproject.com/KB/COM/nettocom.aspx < - 你正在試圖做的很好的例子。

http://www.codeproject.com/KB/COM/Universal_CCW.aspx

+0

雖然這不是相反的方向嗎?它從.NET調用一個COM組件。我想做opoosite。我想寫一個.NET服務,並從C++調用它。 – Jonnster 2011-05-19 16:15:58

+0

我更新了答案,並回復了您的評論。 – Steve 2011-05-19 17:41:25

+0

非常感謝您的幫助。 – Jonnster 2011-05-20 08:08:49

4

我做這個確切的事情在Visual Studio 2008基於MFC的C++應用程序和基於.NET的C#Windows服務。首先,如果你還沒有創建C#Windows服務,我已經有幾個關於創建基本框架的教程。 first tutorial提供了創建服務和將事件寫入特定於應用程序的事件日誌的分步過程。 second tutorial顯示瞭如何修改服務以從命令行安裝和卸載,我發現它非常有用。

其次,您需要決定如何在MFC應用程序和Windows服務之間進行通信。任何種類的進程間通信(IPC)模型都可以工作 - 套接字,管道,共享內存,WCF等等。既然你想遷移到.NET,我會推薦使用Windows Communication Foundation(WCF),它是我已經做到了。具體來說,我根據here所顯示的圖表爲我的通信方法選擇了WCF的命名管道方面。

如果沿着WCF路線走下去,您將從應用程序和服務之間的通信基於.NET的事實中受益。因此,當您將應用程序移至.NET時,通信機制將不必重寫。與此同時的技巧是讓你的MFC應用程序使用WCF代碼。爲此,請使用C#在.NET程序集中編寫WCF客戶端代碼。然後,使用C++ dll橋接您的MFC代碼和.NET程序集之間的差距。我有another tutorial分步說明如何做到這一點。

希望這會有所幫助。

+0

非常感謝。真的很感謝教程和幫助。 – Jonnster 2011-05-20 08:09:27

+0

雖然我點擊了其他答案作爲我的「首選」答案,但這是一個真正的共同努力,但我只能點擊一個答案。感謝您的幫助。 – Jonnster 2011-05-25 13:08:47