C#结构体指针的定义及使⽤详解(intptr的⽤法)在解析C#结构体指针前,必须知道C#结构体是如何定义的。在c#中同样定义该结构体。
C#结构体指针之C#结构体的定义:
1. [StructLayout(LayoutKind.Sequential)]
2.
3. public struct VGAStat
4.
5. {
6.
7. public int ChannelNum;//通道数量
8.
9.
10. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
11.
12. public char[] Version;//版本信息
13.
14. public uint CPUUsage;//CPU占⽤
15.
16. public bool WorkStatusOk; //⼯作状态
17.
18.
19. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
20.
typeof的用法21. public tagCheckArg[] ChannelStatistic;//通道信息
22.
23. }
定义完结构体后,就可将接收到的C#结构体指针转换为定义的结构体对象。
1. VGAStat entries = (VGAStat)Marshal.PtrToStructure(iptr, typeof(VGAStat));
2.
3. //iptr为接收到的⾮托管的结构体指针。
反之,也可将结构体赋值后封送到⾮托管内存。
假如vga为定义后实例化并赋值了的结构体。
1. IntPtr intptr = Marshal.AllocHGlobal(Marshal.SizeOf(vga));
2.
3. Marshal.StructureToPtr(vga, intptr, true);
4.
5. //在此发送intptr指针给⽬的⽅
6.
7. Marshal.FreeHGlobal(intptr);//释放分配的⾮托管内存。
C#结构体指针的定义及使⽤的相关内容那个就向你介绍到这⾥,希望对你了解和学习C#结构体指针有所帮助。
将string转为IntPtr:IntPtr System.Runtime.InteropServices.Marshal.StringToCoTaskMemAuto(string)
将IntPtr转为string:string System.Runtime.InteropServices.MarshalPtrToStringAuto(IntPtr)
msdn.microsoft/zh-cn/library/system.runtime.interopservices.marshal%28v=vs.110%29.aspx
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论