C#解析結(jié)構(gòu)體指針淺析
作者:佚名 
  這里介紹在C#解析結(jié)構(gòu)體指針前,必須知道結(jié)構(gòu)體是如何定義的,定義完結(jié)構(gòu)體后,就可將接收到C#解析結(jié)構(gòu)體指針轉(zhuǎn)換為定義的結(jié)構(gòu)體對(duì)象。
 C#語(yǔ)言有很多值得學(xué)習(xí)的地方,這里我們主要介紹C#解析結(jié)構(gòu)體指針,包括介紹也可將結(jié)構(gòu)體賦值后封送到非托管內(nèi)存。等方面。
在C#解析結(jié)構(gòu)體指針前,必須知道結(jié)構(gòu)體是如何定義的。
- [StructLayout(LayoutKind.Sequential)]
 - public struct VGAStat
 - {
 - public int ChannelNum;
 - //通道數(shù)量
 - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
 - public char[] Version;
 - //版本信息
 - public uint CPUUsage;
 - //CPU占用
 - public bool WorkStatusOk;
 - //工作狀態(tài)
 - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
 - public tagCheckArg[] ChannelStatistic;
 - //通道信息
 - }
 
定義完結(jié)構(gòu)體后,就可將接收到C#解析結(jié)構(gòu)體指針轉(zhuǎn)換為定義的結(jié)構(gòu)體對(duì)象。
- VGAStat entries = (VGAStat)Marshal.PtrToStructure(iptr, typeof(VGAStat));
 - //iptr為接收到的非托管的結(jié)構(gòu)體指針。
 
反之,也可將結(jié)構(gòu)體賦值后封送到非托管內(nèi)存。
假如vga為定義后實(shí)例化并賦值了的結(jié)構(gòu)體。
- IntPtr intptr = Marshal.AllocHGlobal(Marshal.SizeOf(vga));
 - Marshal.StructureToPtr(vga, intptr, true);
 - //在此發(fā)送intptr指針給目的方
 - Marshal.FreeHGlobal(intptr);
 - //釋放分配的非托管內(nèi)存。
 
【編輯推薦】
責(zé)任編輯:佚名 
                    來(lái)源:
                    博客園
 














 
 
 
 
 
 
 