如题:我有一个和要调用C++动态库里的结构相匹配的C#里的结构,在C#调用时出现上面的错误,结构如下:[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi, Size = 28)]
struct ReportInfo
{
[FieldOffset(0)]
public int iDate; // YYYYMMDD (年月日)
[FieldOffset(0)]
public int iTime; // HHMMSSMSS (时分秒毫秒)
//[MarshalAs(UnmanagedType.ByValArray, SizeConst = 24), FieldOffset(17)]
[FieldOffset(17)]
public char[] cMdlName;//[24];
[FieldOffset(41)]
public int iActionCode;
[FieldOffset(43)]
public char ucValue;
[FieldOffset(45)]
public int iFaultNo;
[FieldOffset(50)]
public char[] cReportDesc;//[128];
};
struct ReportInfo
{
[FieldOffset(0)]
public int iDate; // YYYYMMDD (年月日)
[FieldOffset(0)]
public int iTime; // HHMMSSMSS (时分秒毫秒)
//[MarshalAs(UnmanagedType.ByValArray, SizeConst = 24), FieldOffset(17)]
[FieldOffset(17)]
public char[] cMdlName;//[24];
[FieldOffset(41)]
public int iActionCode;
[FieldOffset(43)]
public char ucValue;
[FieldOffset(45)]
public int iFaultNo;
[FieldOffset(50)]
public char[] cReportDesc;//[128];
};
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi, Size = 28)]
大小是28,
FieldOffset(50)]
怎么后面最大偏移都50了,不太对吧
struct ReportInfo
{
[FieldOffset(0)]
public int iDate; // YYYYMMDD (年月日)
[FieldOffset(0)]
public int iTime; // HHMMSSMSS (时分秒毫秒)
//[MarshalAs(UnmanagedType.ByValArray, SizeConst = 24), FieldOffset(17)]
[FieldOffset(17)]
public char[] cMdlName;//[24];
[FieldOffset(41)]
public int iActionCode;
[FieldOffset(43)]
public char ucValue;
[FieldOffset(45)]
public int iFaultNo;
[FieldOffset(50)]
public char[] cReportDesc;//[128];
};
{
int iDate; // YYYYMMDD (年月日)
int iTime; // HHMMSSMSS (时分秒毫秒)
char cMdlName[24];
int iActionCode;
unsigned char ucValue;
int iFaultNo;
char cReportDesc[128];
};
上面是C++里的结构原型
struct ReportInfo
{
[FieldOffset(0)]
public int iDate; // YYYYMMDD (年月日)
[FieldOffset(4)]
public int iTime; // HHMMSSMSS (时分秒毫秒)
[FieldOffset(8)]
public string cMdlName;//[24];
[FieldOffset(32)]
public int iActionCode;
[FieldOffset(36)]
public byte ucValue;
[FieldOffset(37)]
public int iFaultNo;
[FieldOffset(41)]
public string cReportDesc;//[128];
}不确定在c++里是不是这样的布局,因为c++也是会对齐的,有些一个字节的字段会变成占4字节的