c#中使用结构体
来源:百度文库 编辑:神马文学网 时间:2024/04/29 01:33:39
//--------------结构体测试代码-------------------------------------
/*原结构体
//zxmenu.bin的文件头结构
typedef struct
{
charMark[8]; //标记(QLZXMENU)
charVersion; //版本号(0x01)
charreserved1; //保留
unsignedshortMenuNum; //菜单数目
charreserved[4]; //保留
}tagZxMenuHead;
*/
public structtagZxMenuHead
{
[MarshalAs(UnmanagedType.ByValTStr,SizeConst = 8)]
public stringMark;
public byteVersion;
public byteReserved1;
public ushortMenuNum;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst = 4)]
public stringReserved;
}
public static bool BytesToStruct(byte[] bytes,ref tagZxMenuHeadHead)
{
int size= Marshal.SizeOf(Head);
IntPtr buffer =Marshal.AllocHGlobal(size);
try
{
Marshal.Copy(bytes,0, buffer, size);
Head=(tagZxMenuHead)Marshal.PtrToStructure(buffer,Head.GetType());
returntrue;
}
catch
{
Marshal.FreeHGlobal(buffer);
returnfalse;
}
}
static byte[] StructToBytes(tagZxMenuHead structObj)
{
int size=0;
try
{
size=Marshal.SizeOf(structObj);
}
catch (Exception ex)
{
string rr=ex.Message;
}
IntPtr buffer =Marshal.AllocHGlobal(size);
try
{
Marshal.StructureToPtr(structObj, buffer,true);
byte[] bytes = newbyte[size];
Marshal.Copy(buffer, bytes, 0,size);
return bytes;
}
catch(Exception ex)
{
string rr=ex.Message;
return null;
}
finally
{
Marshal.FreeHGlobal(buffer);
}
}
/*原结构体
//zxmenu.bin的文件头结构
typedef struct
{
charMark[8]; //标记(QLZXMENU)
charVersion; //版本号(0x01)
charreserved1; //保留
unsignedshortMenuNum; //菜单数目
charreserved[4]; //保留
}tagZxMenuHead;
*/
public structtagZxMenuHead
{
[MarshalAs(UnmanagedType.ByValTStr,SizeConst = 8)]
public stringMark;
public byteVersion;
public byteReserved1;
public ushortMenuNum;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst = 4)]
public stringReserved;
}
public static bool BytesToStruct(byte[] bytes,ref tagZxMenuHeadHead)
{
int size= Marshal.SizeOf(Head);
IntPtr buffer =Marshal.AllocHGlobal(size);
try
{
Marshal.Copy(bytes,0, buffer, size);
Head=(tagZxMenuHead)Marshal.PtrToStructure(buffer,Head.GetType());
returntrue;
}
catch
{
Marshal.FreeHGlobal(buffer);
returnfalse;
}
}
static byte[] StructToBytes(tagZxMenuHead structObj)
{
int size=0;
try
{
size=Marshal.SizeOf(structObj);
}
catch (Exception ex)
{
string rr=ex.Message;
}
IntPtr buffer =Marshal.AllocHGlobal(size);
try
{
Marshal.StructureToPtr(structObj, buffer,true);
byte[] bytes = newbyte[size];
Marshal.Copy(buffer, bytes, 0,size);
return bytes;
}
catch(Exception ex)
{
string rr=ex.Message;
return null;
}
finally
{
Marshal.FreeHGlobal(buffer);
}
}
c#中使用结构体
c#中使用sendmessage
C#中使用SendMessage
C#基础知识:C#中Trim的使用
C#中static的使用
计算机科学论坛--C#中使用SendMessage[转帖]
在C#程序设计中使用Win32类库
C#中ListView和ImageList配合使用
IT培训:C#中ref和out的使用小结
在C#中使用COM+实现事务控制
C#中使用Excel - 前途未测 - CSDN博客
在C#中使用属性控件添加属性窗口
OpenCV 中文论坛 ? 查看主题 - C#中使用OpenCV
OpenCV 中文论坛 ? 查看主题 - C#中使用OpenCV
C#中Property Grid(属性面板)控件的使用
解读C#中内部类的语法结构(1) - 51CTO.COM
C#使用指针
软件工程师培训课程:C#中ref和out的使用小结
在c#中使用vc++编写的封装在Dll中的类
在C#中使用COM+实现事务控制 - zgqtxwd的专栏 - CSDN博客
C#的Windows编程中多语言的实现(使用XML文件)
C#中使用string.Split方法来分割字符串的注意事项:
C#的Windows编程中多语言的实现(使用XML文件)
C#中使用string.Split方法来分割字符串的注意事项: