在解析C#結構體指標前,必須知道C#結構體是如何定義的。在c#中同樣定義該結構體。
C#結構體指標之C#結構體的定義:
[StructLayout(LayoutKind.Sequential)] public struct VGAStat { public int ChannelNum;//通道數量 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)] public char[] Version;//版本資訊 public uint CPUUsage;//CPU佔用 public bool WorkStatusOk; //工作狀態 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public tagCheckArg[] ChannelStatistic;//通道資訊 }
定義完結構體後,就可將接收到的C#結構體指標轉換為定義的結構體對象。
VGAStat entries = (VGAStat)Marshal.PtrToStructure(iptr, typeof(VGAStat)); //iptr為接收到的非託管的結構體指標。
反之,也可將結構體賦值後封送到非託管記憶體。
假如vga為定義後執行個體化並賦值了的結構體。
IntPtr intptr = Marshal.AllocHGlobal(Marshal.SizeOf(vga)); Marshal.StructureToPtr(vga, intptr, true); //在此發送intptr指標給目的方 Marshal.FreeHGlobal(intptr);//釋放分配的非託管記憶體。
C#結構體指標的定義及使用的相關內容那個就向你介紹到這裡,希望對你瞭解和學習C#結構體指標有所協助。
轉載自:http://developer.51cto.com/art/200908/143813.htm