.NET精簡框架程序設計:C#版

Marshal類

Marshal類支持從託管內存空間複製數據到非託管內存空間,或是從非託管內存空間到託管內存空間。如果你研究在線的MSDN文檔庫,你會看到在桌面.NET框架下這個類支持的分配非託管內存空間的方法和其他的一些與COM對象共同工作的方法。沒有任何內存空間管理和COM支持方法在.NET精簡框架的Marshal實現中出現。表4.5總結了Marshal類的.NET精簡框架支持的成員:13方法名(有一個或多個重載版本)和1個只讀域。

表4.5 Marshal類中.NET精簡框架支持的成員

 

Marshal 成員

描述

在託管和非託管間複製

Copy

在託管和非託管內存空間之間複製值類型數組。支持CLI整型,包括64位整型。支持單精度和雙精度浮點數。有14個重載的方法(7個用來複制到託管內存空間;7個用來複制到非託管內存空間)

複製到非託管內存空間

StructureToPtr

複製託管對象到非託管內存空間

WriteByte

寫入一個字節(byte)到非託管內存空間

WriteInt16

寫入兩個字節到非託管內存空間

WriteInt32

寫入4個字節到非託管內存空間

複製到託管內存空間

PtrToStringUni

在非託管內存空間中創建一個託管的字符串

PtrToStructure

在非託管內存空間中創建一個對象

ReadByte

從非託管內存空間中讀取一個字節

ReadInt16

從非託管內存空間中讀取兩個字節

ReadInt32

從非託管內存空間中讀取四個字節

信息的

IsComObject

如果是硬編碼返回False

SizeOf

查詢一個對象實體的非託管大小。用來設置一些Win32函數調用的結構體大小的域值。

GetLastWin32Error

調用GetLastError函數來取回Win32錯誤碼

SystemDefaultCharSize

在默認的字符集中,字符大小的只讀的域。(在.NET精簡框架中返回2。)爲了可移植性。

Marshal類的一些方法允許改寫非託管的緩存,於是你就能夠將它們作爲參數傳遞到非託管函數中。這個類的另外一些方法可以讓你從非託管緩存中讀取值並寫入托管數據對象中。從緩存中改寫和讀取都是重要的,因爲Win32 API(連同許多其它的基於C的API)爲從一個調用者到一個被調函數的通信提供了使用緩存的擴展。

這個表不包括許多用來分配非託管內存的函數。下面的內存分配函數在MSDN庫中有所說明,並且內建在桌面.NET框架中,但是他們不被.NET精簡框架所支持。

ü AllocHGlobal

ü FreeHGlobal

ü AllocCoTaskMem

ü FreeCoTaskMem

在你從託管內存中讀取或寫入之前,你需要獲得一些非託管內存空間。在深入到Marshal類的內存複製方法中之前,我們需要看一看一個.NET精簡框架程序員如何處理內存分配。

 

引自:http://book.csdn.net/bookfiles/43/100431174.shtml 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章