第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何從本機(jī)C ++調(diào)用C#庫(使用C ++ \ CLI和IJW)

如何從本機(jī)C ++調(diào)用C#庫(使用C ++ \ CLI和IJW)

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

3 回答

?
慕運(yùn)維8079593

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊

您可以很容易地做到這一點(diǎn)。


創(chuàng)建一個(gè).h / .cpp組合

在新創(chuàng)建的.cpp文件上啟用/ clr。(CPP->右鍵單擊->屬性)

設(shè)置“其他#using目錄”的搜索路徑以指向您的C#dll。

本機(jī)


void NativeWrapMethod();

Native.cpp


#using <mscorlib.dll>

#using <MyNet.dll>


using namespace MyNetNameSpace;


void NativeWrapMethod()

{

    MyNetNameSpace::MyManagedClass::Method(); // static method

}

這是將C ++ \ CLI中的C#庫與本機(jī)代碼一起使用的基礎(chǔ)知識(shí)。(只需在需要的地方引用Native.h,然后調(diào)用該函數(shù)即可。)


將C#代碼與托管C ++ \ CLI代碼一起使用大致相同。


關(guān)于這個(gè)問題有很多錯(cuò)誤的信息,因此,希望這可以節(jié)省很多麻煩。:)


我在VS2010-VS2012中做到了(它也可能在VS2008中工作。)


查看完整回答
反對(duì) 回復(fù) 2019-11-28
  • 3 回答
  • 0 關(guān)注
  • 492 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)