110,538
社区成员
发帖
与我相关
我的任务
分享
public struct ST_Params
{
public byte ucParam1;
public byte ucParam2;
public byte ucParam3;
public byte ucParam4;
public byte ucParam5;
};
/// <summary>
/// C++中union 的C#写法。
/// </summary>
public struct UCPARAM
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
public byte[] pParams;
public ST_Params ucParam
{
get
{
return new ST_Params() { ucParam1 = pParams[0], ucParam2 = pParams[1], ucParam3 = pParams[2], ucParam4 = pParams[3], ucParam5 = pParams[4] };
}
set
{
pParams[0] = value.ucParam1;
pParams[1] = value.ucParam2;
pParams[2] = value.ucParam3;
pParams[3] = value.ucParam4;
pParams[4] = value.ucParam5;
}
}
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct DGRAMHEADER_STATUS
{
public short wFlag;
public byte ucFunction;
public UCPARAM ucParam;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 50)]
public byte[] ucAttachData1;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 50)]
public byte[] ucAttachData2;
}
[StructLayout(LayoutKind.Sequential, Pack=...)]
struct DGRAMHEADER_STATUS
{
public short wFlag;
public byte ucFunction;
[MarshalAs( UnmanagedType.ByValTStr, SizeConst= 5)]
public byte[] pParams;
[MarshalAs( UnmanagedType.ByValTStr, SizeConst= 50)]
public byte[] ucAttachData1;
[MarshalAs( UnmanagedType.ByValTStr, SizeConst= 50)]
public byte[] ucAttachData2;
public byte ucParam1 { get { return pParams[0]; } }
public byte ucParam2 { get { return pParams[1]; } }
public byte ucParam3 { get { return pParams[2]; } }
public byte ucParam4 { get { return pParams[3]; } }
public byte ucParam5 { get { return pParams[4]; } }
}