2010-05-20 56 views
1

我有一套我用C++編寫的代碼庫,它將在Linux命令行中運行。他們主要使用STL,並沒有使用該語言的奇特功能。他們已經過測試和工作。在.NET中使用C++類

我需要爲.NET框架編寫一個GUI應用程序,它使用我在這些類中編寫的邏輯來執行操作,但在Windows上運行。 Windows應用程序的一個關鍵要求是它的行爲正如,就像Linux應用程序一樣。因此,我想分享兩個代碼庫之間的代碼。

所以,我想將它們(或如此)導入到新的代碼庫中,並保持兩者之間的更改同步。理想情況下,我想我寫的東西。NET在VB.NET,因爲我更熟悉,但我願意更改爲C#或C++爲.NET開發。

我的問題是,如何在.NET項目中使用這些C++類(只需很少的更改)?這甚至可能嗎?我可以在.NET中創建一個庫嗎?

注意:我的.NET經驗是有限的,所以我很抱歉如果這是一個新手問題。

回答

3

是的,您可以 - 您可以在.NET應用程序中使用C++代碼(只要它不依賴於Linux特定的功能)。 C++/CLI是C++的超集,可以訪問.NET託管類和其他功能。拿你現有的代碼,把它作爲一個DLL來構建(如果你可以管理的話,如果不能管理的話),然後創建調用它的GUI部件。

+0

@Jerry:正確的,並糾正。我想,把名稱與編譯器開關混淆起來。 – 2010-05-20 15:08:47

1

您可能無法將其簡單地移植到等效的C#庫中。你可能想要考慮託管C++來創建一個你可以調用的引用程序集。或者,如果你有房子這個庫在Windows DLL,您可以使用互操作從C#程序中調用的代碼。

1

如果你已經架構這口井,讓你的邏輯在一個相對較少的不關心GUI,那麼我建議建立邏輯,你可以從你的GUI調用DLL函數。

一種方法是暴露一堆採用相對簡單參數類型的「extern C」函數(例如ints和strings,而不是大型結構體,即從其他結構體繼承等)。然後,您可以輕鬆使用P /調用(又名DllImport)直接從您的VB.NET代碼調用該代碼。同時你的Unix代碼也可以在相同的代碼庫中調用相同的函數。沒有分叉。

如果您需要傳遞更復雜的參數類型,那麼您可能希望在C++/CLI中編寫UI(因爲它可以包含頭文件並知道類型)或者(因爲設計器的故事對於C++/CLI)寫在VB.NET你的UI,並添加一個參照本發明的包裝物C++/CLI組件調用的邏輯。在這兩種情況下,如果這使得你的生活變得更簡單,那麼這些功能不必是「extern C」。

無論哪種方式,不要複製所有的業務邏輯到一個新的VB.NET或C#或C++/CLI文件和前進維護分叉代碼。你會更高興地保持一個共同的核心和互動。