標籤:style http color io os ar 使用 sp on
在解析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#結構體指標有所協助。
將string轉為IntPtr:IntPtr System.Runtime.InteropServices.Marshal.StringToCoTaskMemAuto(string)
將IntPtr轉為string:string System.Runtime.InteropServices.MarshalPtrToStringAuto(IntPtr)
http://msdn.microsoft.com/zh-cn/library/system.runtime.interopservices.marshal%28v=vs.110%29.aspx
C#結構體指標的定義及使用詳解(intptr的用法)