2012-02-13 89 views
2

我有一個通過COM公開東西的C++ DLL。我想將它轉換爲公開一個託管界面的C++/CLI。理想情況下,我只需添加CLI並逐個轉換接口。到目前爲止,我還沒有取得任何成功,所以我正在尋找一個特定的策略。如何從C++ COM遷移到C++ CLI


的更多細節: 很久以前,我使用COM C#和C++之間來回通信創建一個應用程序。我厭倦了COM,並且在C++端需要註冊和箍跳。

我想要使用C++/CLI,並從C++/CLI偶爾調用本地庫來獲取整個事物作爲託管代碼工作。

任何人都可以提出一個溫和的遷移路徑,這樣我可以同時擁有CLI和COM,並且可以隨着班級測試將事情轉換爲我隨行的模式嗎?或類似的東西。

要清楚:我目前有定義和實現COM接口的本機C++代碼。我有C#代碼使用COM屬性來導出類。所有這些東西都被註冊爲COM互操作,並且有雙向的調用。我希望將C++切換到CLI並切換到C++託管類而不是COM類。

Ramhound更新的問題:無論如何,我正在跑進磚牆。在C++ dll上打開/ clr會給我提供其他連接到C++代碼的東西的鏈接錯誤。

+0

更新您的問題。你的評論沒有意義。 – 2012-02-13 19:26:41

+1

沒有什麼比您想要完成的「理想」或「切換」更好。這可能是很多工作。我明白這不能回答你的問題,但如果COM註冊是主要問題,你可以切換到無註冊COM:http://msdn.microsoft.com/en-us/library/ms973913.aspx – 2012-02-17 17:35:26

+0

感謝您的輸入,西蒙。我開始懷疑可能是這種情況。我會檢查一下。 – 2012-02-17 18:29:09

回答

2

你可能想通過這種閱讀(即趕我走在C之類的不可讀的ATL/COM消息++),因爲它提供了一些不同的方法和注意事項涉及:http://msdn.microsoft.com/en-us/magazine/dd315414.aspx

下面是如何一個簡單的例子在C++/CLI,在那裏你可以定義一個或兩個方法,並添加更多的,當您去互操作使用方法:http://blogs.msdn.com/b/borisj/archive/2006/07/29/683061.aspx

+0

謝謝。第一個鏈接非常豐富,並給出了很好的考慮。在我們的例子中,性能至關重要,interop基本上將訪問權限傳遞給C#對象。數據通過COM從C#接收;通過COM回調創建新對象;當C++函數結束時,所有這些COM東西都被刪除。現在我們該如何介紹C++ CLI? – 2012-02-16 14:02:14

-1

,請點擊此

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

我們e tlimp生成一個COM非託管DLL到託管DLL

很簡單!

+2

對不起,沒有回答這個問題。我已經*有一個程序生成一個託管互操作DLL來連接到非託管COM。我*希望*完全停止使用COM,並改用C++/CLI。 – 2012-02-14 14:54:09