2009-07-01 58 views
2

我們有本機Win32 C++代碼和一組我們希望從C++代碼中調用的C#程序集。我總結我們的比例爲:C++調用C#選項

  1. 使用COM。 C#代碼需要使用其他屬性(GUID,COM​​Visible)進行修飾。 C#程序集需要註冊regasm,然後才能通過COM使用本地C++代碼。

  2. 使用C++/CLI(以前管理的C++)包裝類。一個C++類可以添加到本地C++項目中。該類將使用/ clr進行編譯。本地C++代碼將調用C++/CLI類,然後調用.Net代碼。沒有涉及COM。根據需要,通過C++/CLI擴展處理的編組來啓動CLR。

  3. 在本地C++代碼中託管CLR的實例。

我打算折扣選項3,因爲我沒有看到除了選項2之外的好處,除了我們失去了對包裝類的需求之外。所以問題是,選項1對選項2有什麼優點/缺點?

在此先感謝。

回答

3

選項2將表現最好,成爲最無縫和可維護的IMO。

我發現選項1真的沒有優勢。使用C++/CLI似乎功能更好,工作更快,而且一般來說更簡單。

你也可以,順便說一句,直接使用C#程序集直接沒有包裝類。這確實需要編譯任何想要在/ CLR中使用它的文件,但它工作得很好。

1

對於選項1,您的主要專業人士將不必編寫一個包裝類,它可以根據您的項目而變得多毛。

對於選項2,您不必修改託管庫以便於非託管使用,而這有時不是一種選擇。

對我來說,它歸結於你想要改變你的代碼的地方。

1

使用選項2,您還可以非常直接地將整個應用程序轉換爲C++/CLI,以避免您將得到的託管/非託管轉換。取決於你如何使用引用的組件,即獲得性能優勢,轉換可能是一個問題。

到目前爲止,我只有積極的經驗與C++/CLI,並可以推薦去那條路線。