C#操作結構體

在C#解析結構體指針前,必須知道結構體是如何定義的。

  1. [StructLayout(LayoutKind.Sequential)]  
  2. public struct VGAStat  
  3. {  
  4. public int ChannelNum;  
  5. //通道數量  
  6.  
  7. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]  
  8.  
  9. public char[] Version;  
  10. //版本信息  
  11.  
  12. public uint CPUUsage;  
  13. //CPU佔用  
  14.  
  15. public bool WorkStatusOk;   
  16. //工作狀態  
  17.  
  18. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]  
  19. public tagCheckArg[] ChannelStatistic;  
  20. //通道信息  

定義完結構體後,就可將接收到C#解析結構體指針轉換爲定義的結構體對象。

  1. VGAStat entries = (VGAStat)Marshal.PtrToStructure(iptr, typeof(VGAStat));  
  2. //iptr爲接收到的非託管的結構體指針。 

反之,也可將結構體賦值後封送到非託管內存。

假如vga爲定義後實例化並賦值了的結構體。

  1. IntPtr intptr = Marshal.AllocHGlobal(Marshal.SizeOf(vga));  
  2. Marshal.StructureToPtr(vga, intptr, true);  
  3. //在此發送intptr指針給目的方  
  4. Marshal.FreeHGlobal(intptr);  
  5. //釋放分配的非託管內存。
發佈了29 篇原創文章 · 獲贊 0 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章