您的位置:首页 > 编程语言 > C#

在解析C#结构体指针前,必须知道C#结构体是如何定义的。在c#中同样定义该结构体。

2011-09-08 15:10 525 查看
在解析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);//释放分配的非托管内存。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: