2009-12-23 112 views
3

在我的項目中,我得到了一個帶有C++示例代碼的設備。代碼正常,設備按預期工作。創建C++ Dll,並從C#調用它#

但我需要它與我的C#接口交談,因爲所有其他設備當前正在使用C#接口。

所以我打算爲驅動程序創建一個DLL包裝器。我將創建一個我自己的C++庫(從具有適當接口的源代碼),並使用DLLImport從C#調用此C++庫(只需在那裏調用我的接口)。

我非常肯定它可以這樣做,但我從來沒有創建過C++庫,並從C#中使用它。那麼,任何人都可以向我推薦一些適合我的問題的教程嗎?

我使用C++/C#INT VS.NET 2008

問候, Maksud

回答

1

根據DLL,你需要做的,你可能不需要直接創建一個包裝的東西。您可能可以通過P/Invoke獲得該功能。您需要評估您的具體需求以及庫中提供的代碼。

+0

對於漂亮的文章+1。 – max 2009-12-23 07:08:03

2

另一個有用的工具,你可以在你的處置是C++ CLI

您可以使用C++ CLI創建中間庫 - 一個公開託管類但運行非託管C++代碼的庫。實際上,您可以在同一個DLL中混合託管和非託管C++。

非託管部分可以訪問非託管DLL而無需使用PInvoke函數。

您的C#代碼可以訪問此中間庫中的託管類。

+0

+1。實際上,您可以在同一個DLL中混合託管和非託管C++。 – RickNZ 2009-12-23 06:25:01

+0

@RickNZ - 這正是我試圖傳達的信息,但它一定不夠清楚。我已經在郵件中加入了你的句子,謝謝。 – 2009-12-23 06:39:37

+0

這絕對是要走的路,除非您計劃將庫移植到Mono,而Mono不支持C++/CLR中的本機代碼。 – 2009-12-23 06:42:05

0

對於任何涉及到誰這個問題,並正在尋找的答案,你可能會想嘗試xInterop NGen++ , a C# wrapper generator for native C++ DLL,已剛剛公佈於衆,該工具可以生成C#包裝通過使用先進的P/Invoke技術,自動且即時地爲原生C++ DLL提供支持。看看當前的版本,免費版本即將推出。

(我是該工具的作者)

+0

版本2似乎仍處於alpha版本的早期階段。用戶界面非常麻煩,並且沒有生成文件。 (「發生異常:無法檢索PDB信息..「) – StuWeldon 2014-08-30 04:38:11

+0

@StuWeldon,您可能已經嘗試過爲當前的試用版本不支持的C風格的DLL構建一個C#包裝,我們在最新版本中添加了C風格DLL支持,但無法下載。仍然有興趣使用xInterop NGen ++來爲你的C風格DLL創建封裝,請使用我們網站上的聯繫我們頁面聯繫我們,我們應該能夠解決你遇到的問題。任何其他人有任何問題,請也請通過http://www.xinterop.com與我們聯繫,我們將能夠更好地爲您提供支持。 – xInterop 2014-09-22 01:56:11