2012-05-18 220 views
3

我有一個用標準C++編寫的庫。我也有一個用C#編寫的.net窗體應用程序,它使用非託管庫。混合託管/非託管C++?

我明白我可以使用pinvoke,但是我的C++完全是OO,我真的不想亂搞編組等。

有沒有辦法可以創建一個新的託管C++ dll項目,複製並粘貼我的頭文件和代碼文件,並編譯它並訪問所有類?

或者我需要在託管C++中創建一些ref類,並將它連接到我的非託管類?我只是希望這個儘可能簡單。

謝謝!

+1

C++/CLI混合託管/非託管性質。 –

+0

[C++/CLI混合模式DLL創建]的可能重複(http://stackoverflow.com/questions/2691325/c-cli-mixed-mode-dll-creation) –

回答

3

即使在C++/CLI中,你仍然需要編寫特定的.NET包裝,它們只是看起來不一樣。所以答案是,你可以把它放在一個C++/CLI項目中,並重新編譯並使用它,不是。您仍然需要對數據進行編組(在這種情況下,您可能也會使用p/Invoke),或者您可以創建句柄並使用固定內存來使您的結構可用於託管代碼。

我已經完成了這兩種方式:我已經在CUDA C中編寫了一個GPU庫,並使用p/Invoke從F#中調用了它,並且我用C++編寫了一個視頻處理庫,並編寫了一個精簡的C++/CLI包裝器然後在.NET應用程序中使用它。我認爲CLI包裝更加痛苦,但對於實時視頻,我需要更少的延遲(減少複製內存)。對於GPU項目,我更關心吞吐量。

0

您可能要編寫C++/CLI中的包裝類。只要你返回句柄而不是指針,枚舉器而不是集合等等,那麼這樣做相當簡單。

相關問題