我在C#Project中使用COM dll。 我的COM dll中有一个USERINFO结构,如下所示:
struct USERINFO
{
BYTE UserID[USER_ID_SIZE];//42
BYTE FirstName[NAME_SIZE];//66
BYTE LastName[NAME_SIZE]; //66
long Pin;
BYTE TimeGroupIDList[IDLIST_SIZE];//10
enum EUserKind eUserKind;
BYTE WarningEye;
};
当我在C#Application中使用此结构来填充此用户数据结构并传递给我的AddUser API时,它会返回此错误。
感谢任何帮助。 感谢。
答案 0 :(得分:5)
C#不支持嵌入在结构中的固定长度数组(在不安全的上下文中除外),因此您的C结构可能被编组为C#结构,如下所示:
struct USERINFO
{
MarshalAs(UnmanagedType.ByValArray, SizeConst = 42)
BYTE[] UserID;
MarshalAs(UnmanagedType.ByValArray, SizeConst = 66)
BYTE[] FirstName;
// etc.
};
请注意,成员是对数组的引用,而不是嵌入式数组。
为了使编组工作,阵列必须是正确的长度(或者至少是正确的长度,我忘了)。例如,UserID应使用userInfo.UserID = new byte[42];
答案 1 :(得分:0)
我有一个类似的问题,它已经通过为结构添加构造函数来解决:
struct A
{
public A(int b, int c)
{
B = b;
C = c;
}
public int B;
public int C
}
值得一试!