C#調(diào)用C++版本dll時(shí)的類型轉(zhuǎn)換需要注意的問(wèn)題小結(jié)
1. C++ 里的Char類型是1 個(gè)字節(jié),c#里的Char是兩個(gè)字節(jié),不可以對(duì)應(yīng)使用;可使用c#里的byte對(duì)應(yīng)
2. structType temp = (structType)Marshal.PtrToStructure(IntPtr, typeof(structType));說(shuō)明:此方式轉(zhuǎn)換只針對(duì)包含c++基本類型的結(jié)構(gòu)體,如果包含指針數(shù)組的結(jié)構(gòu)體,使用泛型函數(shù)比較方便。
3. [StructLayoutAttribute(LayoutKind.Sequential)] 說(shuō)明:StructLayoutAttribute 類 使 用戶可以控制類或結(jié)構(gòu)的數(shù)據(jù)字段的物理布局;LayoutKind控制當(dāng)導(dǎo)出到非托管代碼時(shí)對(duì)象的布局。
4. [MarshalAsAttribute(UnmanagedType.LPWStr)] 指示如何在托管代碼和非托管代碼之間封送數(shù)據(jù);說(shuō)明:UnmanagedType指定如何將參數(shù)或字段封送到非托管代碼。
托管代碼 (managed code)
由公共語(yǔ)言運(yùn)行庫(kù)環(huán)境(而不是直接由操作系統(tǒng))執(zhí)行的代碼。托管代碼應(yīng)用程序可以獲得公共語(yǔ)言運(yùn)行庫(kù)服務(wù),例如自動(dòng)垃圾回收、運(yùn)行庫(kù)類型檢查和安全支持等。這些服務(wù)幫助提供獨(dú)立于平臺(tái)和語(yǔ)言的、統(tǒng)一的托管代碼應(yīng)用程序行為。
托管代碼是可以使用20多種支持Microsoft .NET Framework的高級(jí)語(yǔ)言編寫(xiě)的代碼,它們包括:C#, J#, Microsoft Visual Basic .NET, Microsoft JScript .NET, 以及C++。所有的語(yǔ)言共享統(tǒng)一的類庫(kù)集合,并能被編碼成為中間語(yǔ)言(IL)。運(yùn)行庫(kù)編譯器(runtime-aware compiler)在托管執(zhí)行環(huán)境下編譯中間語(yǔ)言(IL)使之成為本地可執(zhí)行的代碼,并使用數(shù)組邊界和索引檢查,異常處理,垃圾回收等手段確保類型的安全。
在托管執(zhí)行環(huán)境中使用托管代碼及其編譯,可以避免許多典型的導(dǎo)致安全黑洞和不穩(wěn)定程序的編程錯(cuò)誤。同樣,許多不可靠的設(shè)計(jì)也自動(dòng)的被增強(qiáng)了安全性,例如 類型安全檢查,內(nèi)存管理和釋放無(wú)效對(duì)象。程序員可以花更多的精力關(guān)注程序的應(yīng)用邏輯設(shè)計(jì)并可以減少代碼的編寫(xiě)量。這就意味著更短的開(kāi)發(fā)時(shí)間和更健壯的程序。
非托管代碼 (unmanaged code)
在公共語(yǔ)言運(yùn)行庫(kù)環(huán)境的外部,由操作系統(tǒng)直接執(zhí)行的代碼。非托管代碼必須提供自己的垃圾回收、類型檢查、安全支持等服務(wù);它與托管代碼不同,后者從公共語(yǔ)言運(yùn)行庫(kù)中獲得這些服務(wù)。
相關(guān)文章
asp.net下模態(tài)對(duì)話框關(guān)閉之后繼續(xù)執(zhí)行服務(wù)器端代碼的問(wèn)題
asp.net下模態(tài)對(duì)話框關(guān)閉之后繼續(xù)執(zhí)行服務(wù)器端代碼的問(wèn)題...2007-04-04(asp.net c#)DropDownList綁定后顯示對(duì)應(yīng)的項(xiàng)的兩種方法
(asp.net c#)DropDownList綁定后顯示對(duì)應(yīng)的項(xiàng)的兩種方法 其實(shí)兩個(gè)方法的思路都是一樣,都是拿id去配對(duì)2011-04-04asp.net 利用IIS的404錯(cuò)誤將文件重寫(xiě)成目錄的簡(jiǎn)單方法
為什么要把文件重寫(xiě)成目錄,主要原因是討好搜索引擎,至于為什么寫(xiě)成目錄搜索引擎就比較容易搜錄不在本文討論范圍之內(nèi)。2009-09-09詳解在Windows下如何使用AspNetCore Api 和consul
這篇文章主要介紹了詳解在Windows下如何使用AspNetCore Api 和consul,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06C# XML操作 代碼大全(讀XML,寫(xiě)XML,更新,刪除節(jié)點(diǎn),與dataset結(jié)合等)
C#操作XML(讀XML,寫(xiě)XML,更新,刪除節(jié)點(diǎn),與dataset結(jié)合等),以下就是操作XML的所有方法,相信可以滿足很大一部份的使用了。2009-06-06VS2013安裝時(shí)如何避開(kāi)IE10的限制
這篇文章主要介紹了VS2013安裝時(shí)如何避開(kāi)IE10的限制,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06DataGridView使用自定義控件實(shí)現(xiàn)簡(jiǎn)單分頁(yè)功能(推薦)
這篇文章主要介紹了DataGridView使用自定義控件實(shí)現(xiàn)簡(jiǎn)單分頁(yè)功能,數(shù)據(jù)庫(kù)使用的是sqlserver,本文通過(guò)通過(guò)實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友參考下吧2019-11-11