其实质是传递内存变量,也就是传递内存地址及内容,所以最重要的就是内存分配相匹配
typedef struct
{
unsigned int nIsReport;
unsigned int nMsgFormat;
unsigned int nMsgLength;
char sMsgID[10+1];
char sRecvTime[14+1];
char sSrcTermID[21+1];
char sDestTermID[21+1];
char sMsgContent[252+1];
}DeliverResp;
比如这个结构,可以定义为:
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
- public struct DeliverResp
- {
- public UInt32 nIsReport;
- public UInt32 nMsgFormat;
- public UInt32 nMsgLength;
- //[MarshalAs(UnmanagedType.ByValTStr, SizeConst=11)] public string sMsgID;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst=11)] public byte[] sMsgID;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=15)] public string sRecvTime;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=22)] public string sSrcTermID;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=22)] public string sDestTermID;
- //[MarshalAs(UnmanagedType.ByValTStr, SizeConst=253)] public string sMsgContent;
- public sMsgContent sMsg;
- }
- [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
- public struct sMsgContent
- {
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=3)] public string sID;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst=10)] public byte[] sMsgID;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=240)] public string sContent;
- }
因为 char sMsgID[10+1] 存贮的是 10 byte 的BCD 编码字符串,
char sMsgContent[252+1] 存贮的是 struct sMsgContent 结构的内容