C#语言有很多值得学习的地方,这里我们主要介绍C#解析结构体指针,包括介绍也可将结构体赋值后封送到非托管内存。等方面。

专注于为中小企业提供成都网站制作、成都网站设计、外贸营销网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业平谷免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上1000+企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
在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);
 - //释放分配的非托管内存。
 
Copyright © 2009-2022 www.wtcwzsj.com 青羊区广皓图文设计工作室(个体工商户) 版权所有 蜀ICP备19037934号