背景:作為較大任務的一部分,我需要使非托管C ++和C代碼可以訪問C#庫。為了自己回答這個問題,我過去幾天/幾周一直在學習C ++ / CLI。從不受管理的C ++和C中使用C#dll似乎有許多不同的方法。簡要地講,一些答案似乎是:使用Interlope服務,使用.com。然后使用PInvoke(似乎僅從C#到C ++)并在C ++ / CLR中使用IJW(這似乎是Interlope服務)。我認為最好建立一個可能是CLR包裝器的庫,該庫使用IJW代表本機C ++和C代碼調用C#dll。細節:我需要將字符串以及int的值從c ++代碼傳遞到C#dll,然后返回void。相關性:許多公司有很多借口來混合和匹配C ++,C和C#。性能:非托管代碼通常更快,接口:托管人員也告訴我們,托管接口通常更易于維護,部署,并且通常更易于使用。舊版代碼也迫使我們。在那里(就像我們爬過的山一樣)。雖然有很多關于如何從C#調用C ++庫的示例。通過Googling很難找到如何從C ++代碼調用C#庫的示例,特別是如果您想查看更新的4.0+代碼。軟體: C#,C ++ / CLR,C ++,C,Visual Studio 2010和.NET 4.0問題詳細信息:可以分為多個部分:使用com對象有優勢嗎?還是PInvoke?還是其他方法?(盡管我確實在Google Land上找到了有關該主題的更多信息,但我覺得這里的學習曲線也一樣陡峭。IJW似乎答應了我想要做的事情。我應該放棄尋找IJW解決方案并專注于此嗎?)(優點/缺點?)我是否能想到有解決方案,我編寫了一個在C ++ / CLR中利用IJW的包裝器?在哪里可以找到有關此主題的更多信息,不要說我對Google的了解不夠//或不告訴我您在哪里看到MSDN的情況。(我認為我更喜歡使用此選項,以便編寫清晰簡單的代碼。)問題范圍的縮?。何艺J為我真正的問題和需求是回答以下較小的問題:如何設置C ++ / CLR庫,非托管C ++文件可以在Visual Studio中使用。我認為,如果我可以簡單地在非托管C ++代碼中實例化托管C ++類,那么我也許可以解決其余的問題(接口和包裝等)。我希望我的主要愚蠢在于嘗試在Visual Studio中設置引用/#includes等,顯然我可能還會有其他誤解。也許對這整件事的答案可能只是指向幫助我的教程或說明的鏈接。研究:我已經Google和Bing一遍又一遍,并取得了一些成功。我發現許多鏈接向您展示了如何使用C#代碼中的非托管庫。我將承認,有一些鏈接顯示了如何使用com對象進行操作。針對VS 2010的結果并不多。參考資料: 我已經閱讀了很多篇文章。我試圖通過最相關的工作。有些人似乎非常接近答案,但是我似乎無法讓他們工作。我懷疑我所缺少的東西實在太小了,例如濫用關鍵字ref,缺少#include或using語句,或者濫用命名空間,或者實際上未正確使用IJW功能或缺少VS需要正確處理編譯等。所以您想知道,為什么不包括代碼?好吧,我覺得自己不在一個我理解并期望自己能工作的代碼的地方。我想去一個我了解的地方,當我到達那里時,也許我需要幫助修復它。我將隨機包含兩個鏈接,但不允許在當前的生命值級別上全部顯示它們。http://www.codeproject.com/Articles/35437/Moving-Data-between-Managed-Code-and-Unmanaged-Cod這會從C ++到Visual Basic,再通過C ++ CLR雙向調用托管和非托管代碼中的代碼,當然,我對C#感興趣。http : //www.codeproject.com/Articles/9903/Calling來自非托管代碼和服務的托管代碼
3 回答

慕運維8079593
TA貢獻1876條經驗 獲得超5個贊
您可以很容易地做到這一點。
創建一個.h / .cpp組合
在新創建的.cpp文件上啟用/ clr。(CPP->右鍵單擊->屬性)
設置“其他#using目錄”的搜索路徑以指向您的C#dll。
本機
void NativeWrapMethod();
Native.cpp
#using <mscorlib.dll>
#using <MyNet.dll>
using namespace MyNetNameSpace;
void NativeWrapMethod()
{
MyNetNameSpace::MyManagedClass::Method(); // static method
}
這是將C ++ \ CLI中的C#庫與本機代碼一起使用的基礎知識。(只需在需要的地方引用Native.h,然后調用該函數即可。)
將C#代碼與托管C ++ \ CLI代碼一起使用大致相同。
關于這個問題有很多錯誤的信息,因此,希望這可以節省很多麻煩。:)
我在VS2010-VS2012中做到了(它也可能在VS2008中工作。)
- 3 回答
- 0 關注
- 490 瀏覽
添加回答
舉報
0/150
提交
取消