我有一個用標準C++編寫的庫。我也有一個用C#編寫的.net窗體應用程序,它使用非託管庫。混合託管/非託管C++?
我明白我可以使用pinvoke,但是我的C++完全是OO,我真的不想亂搞編組等。
有沒有辦法可以創建一個新的託管C++ dll項目,複製並粘貼我的頭文件和代碼文件,並編譯它並訪問所有類?
或者我需要在託管C++中創建一些ref類,並將它連接到我的非託管類?我只是希望這個儘可能簡單。
謝謝!
我有一個用標準C++編寫的庫。我也有一個用C#編寫的.net窗體應用程序,它使用非託管庫。混合託管/非託管C++?
我明白我可以使用pinvoke,但是我的C++完全是OO,我真的不想亂搞編組等。
有沒有辦法可以創建一個新的託管C++ dll項目,複製並粘貼我的頭文件和代碼文件,並編譯它並訪問所有類?
或者我需要在託管C++中創建一些ref類,並將它連接到我的非託管類?我只是希望這個儘可能簡單。
謝謝!
即使在C++/CLI中,你仍然需要編寫特定的.NET包裝,它們只是看起來不一樣。所以答案是,你可以把它放在一個C++/CLI項目中,並重新編譯並使用它,不是。您仍然需要對數據進行編組(在這種情況下,您可能也會使用p/Invoke),或者您可以創建句柄並使用固定內存來使您的結構可用於託管代碼。
我已經完成了這兩種方式:我已經在CUDA C中編寫了一個GPU庫,並使用p/Invoke從F#中調用了它,並且我用C++編寫了一個視頻處理庫,並編寫了一個精簡的C++/CLI包裝器然後在.NET應用程序中使用它。我認爲CLI包裝更加痛苦,但對於實時視頻,我需要更少的延遲(減少複製內存)。對於GPU項目,我更關心吞吐量。
您可能要編寫C++/CLI中的包裝類。只要你返回句柄而不是指針,枚舉器而不是集合等等,那麼這樣做相當簡單。
C++/CLI混合託管/非託管性質。 –
[C++/CLI混合模式DLL創建]的可能重複(http://stackoverflow.com/questions/2691325/c-cli-mixed-mode-dll-creation) –