1. 程式人生 > >c#中Marshal.Copy()方法的使用

c#中Marshal.Copy()方法的使用

c#中Marshal.Copy方法的使用

Marshal.copy()方法用來在託管物件(陣列)和非託管物件(IntPtr)之間進行內容的複製

函式有很多過載,如下所示:

Copy(array<Byte>[]()[], Int32, IntPtr, Int32) 將一維的託管 8 位無符號整數陣列中的資料複製到非託管記憶體指標。

Copy(array<Char>[]()[], Int32, IntPtr, Int32) 將資料從一維的託管字元陣列複製到非託管記憶體指標。

Copy(array<Double>[]()[], Int32, IntPtr, Int32) 將資料從一維的託管雙精度浮點陣列複製到非託管記憶體指標。

Copy(array<Int16>[]()[], Int32, IntPtr, Int32) 將資料從一維的託管 16 位帶符號整數陣列複製到非託管記憶體指標。

Copy(array<Int32>[]()[], Int32, IntPtr, Int32) 將資料從一維的託管 32 位帶符號整數陣列複製到非託管記憶體指標。

Copy(array<Int64>[]()[], Int32, IntPtr, Int32) 將資料從一維的託管 64 位帶符號整數陣列複製到非託管記憶體指標。

Copy(IntPtr, array<Byte>[]()[], Int32, Int32) 將資料從非託管記憶體指標複製到託管 8 位無符號整數陣列。

Copy(IntPtr, array<Char>[]()[], Int32, Int32) 將資料從非託管記憶體指標複製到託管字元陣列。

Copy(IntPtr, array<Double>[]()[], Int32, Int32) 將資料從非託管記憶體指標複製到託管雙精度浮點陣列。

Copy(IntPtr, array<Int16>[]()[], Int32, Int32) 將資料從非託管記憶體指標複製到託管 16 位帶符號整數陣列。

Copy(IntPtr, array<Int32>[]()[], Int32, Int32) 將資料從非託管記憶體指標複製到託管 32 位帶符號整數陣列。

Copy(IntPtr, array<Int64>[]()[], Int32, Int32) 將資料從非託管記憶體指標複製到託管 64 位帶符號整數陣列。

Copy(IntPtr, array<IntPtr>[]()[], Int32, Int32) 將資料從非託管記憶體指標複製到託管 IntPtr 陣列。

Copy(IntPtr, array<Single>[]()[], Int32, Int32) 將資料從非託管記憶體指標複製到託管單精度浮點陣列。

Copy(array<IntPtr>[]()[], Int32, IntPtr, Int32) 將資料從一維託管 IntPtr 陣列複製到非託管記憶體指標。

Copy(array<Single>[]()[], Int32, IntPtr, Int32) 將資料從一維的託管單精度浮點陣列複製到非託管記憶體指標。

這裡需要注意的是兩個引數Int32型別的使用

Int32型別的兩個引數都是用來限定陣列的,其中一個限定開始位置,一個限定長度

注意:長度是指陣列元素的個數,而不是指位元組數

示例:

很經典哦

  1. string name = "xuwei";    
  2. IntPtr pName = Marshal.AllocHGlobal(2*name.Length);    
  3. Marshal.Copy(name.ToCharArray(), 0, pName, name.Length);    
  4. char[] cName = newchar[name.Length];    
  5. Marshal.Copy(pName, cName, 0, name.Length);    

易知name.Length=5

(1) 給pName指標分配了2*name.Length位元組的空間

注意:Marshal.AllocHGlobal(Int32 cb)中的引數cb是分配的位元組數

(2) 將name轉換的char[]中的內容複製到pName所指的記憶體中,所取長度為char的個數,即name.Length

(3) 給cName分配name.Length個char位置

(4) 將pName中的內容複製到cName陣列中,長度同樣為name.Length

原文地址:http://blog.csdn.net/xiaobai1593/article/details/7065955