//--------------结构体测试代码-------------------------------------
/*原结构体
//zxmenu.bin的文件头结构
typedef struct
{
char Mark[8]; //标记(QLZXMENU)
char Version; //版本号(0x01)
char reserved1; //保留
unsigned short MenuNum; //菜单数目
char reserved[4]; //保留
}tagZxMenuHead;
*/
public struct tagZxMenuHead
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
public string Mark;
public byte Version;
public byte Reserved1;
public ushort MenuNum;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
public string Reserved;
}
public static bool BytesToStruct(byte[] bytes,ref tagZxMenuHead Head)
{
int size = Marshal.SizeOf(Head);
IntPtr buffer = Marshal.AllocHGlobal(size);
try
{
Marshal.Copy(bytes, 0, buffer, size);
Head=(tagZxMenuHead)Marshal.PtrToStructure(buffer, Head.GetType());
return true;
}
catch
{
Marshal.FreeHGlobal(buffer);
return false;
}
}
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 = new byte[size];
Marshal.Copy(buffer, bytes, 0, size);
return bytes;
}
catch(Exception ex)
{
string rr=ex.Message;
return null;
}
finally
{
Marshal.FreeHGlobal(buffer);
}
}