我有以下 c++ 结构
typedef struct {
char szAccountNo[11];
char szAccountName[40];
char act_pdt_cdz3[3];
char amn_tab_cdz4[4];
char expr_datez8[8];
char granted;
char filler[189];
}ACCOUNTINFO;
typedef struct {
char szDate [14];
char szServerName [15];
char szUserID [8];
char szAccountCount [3];
ACCOUNTINFO accountlist [999];
}LOGININFO;
typedef struct{
int TrIndex;
LOGININFO *pLoginInfo;
}LOGINBLOCK;
并转换为 C# 类
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public class ACCOUNTINFO
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 11)]
public string szAccountNo;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 40)]
public string szAccountName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 3)]
public string act_pdt_cdz3;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
public string amn_tab_cdz4;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
public string expr_datez8;
public char granted;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 189)]
public string filler;
};
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public class LOGININFO
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)]
public string szDate;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)]
public string szServerName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
public string szUserID;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 3)]
public string szAccountCount;
[MarshalAs(UnmanagedType.Struct, SizeConst = 99)]
public ACCOUNTINFO[] accountlist;
};
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public class LOGINBLOCK
{
[MarshalAs(UnmanagedType.I4)]
public int TrIndex;
[MarshalAs(UnmanagedType.Struct, SizeConst = 1)]
public LOGININFO pLoginInfo;
};
我使用以下两种方法在 WndProc 中转换 LParam。
1. TrStruct.LOGINBLOCK lb = new TrStruct.LOGINBLOCK();
lb = (TrStruct.LOGINBLOCK)m.GetLParam(typeof(TrStruct.LOGINBLOCK));
2. TrStruct.LOGINBLOCK lb = (TrStruct.LOGINBLOCK) Marshal.PtrToStructure(m.LParam, typeof(TrStruct.LOGINBLOCK));
但是,它没有成功,也没有发出常规错误消息,而是在“输出”窗口中收到消息“mscorlib.dll 中发生'System.TypeLoadException'类型的第一次机会异常”。谁能告诉我我的转换有什么问题?