C代码如下typedef struct{
char name[20];
char passwd[20];
}CURONE;
typedef struct{ CURONE admin;
CURONE hiadmin[10];
CURONE hipasswd[10];}WHOLE;BOOL GET_PARAM(char *sname,char *url,WHOLE &w)
{
//对w 的结构体进行处里
}
我的C#代码如下:
public struct CURONE{
[MarshalAs(UnmanagedType.ValTChar,SizeConst=20)]
string name;
[MarshalAs(UnmanagedType.ValTChar,SizeConst=20)]
string passwd;
}public struct WHOLE{ [MarshalAs(UnmanagedType.Struct)] //正确
CURONE admin;
[MarshalAs(UnmanagedType.Struct,SizeConst=10)]
CURONE hiadmin[]; // 报错,类型不对
[MarshalAs(UnmanagedType.Struct,,SizeConst=10)]
CURONE hipasswd[]; //报错, 类型不对}经过测试,对结构数组,不按数组操作,确能够通过,当然只能得到 hiadmin[0] 的值了。
[MarshalAs(UnmanagedType.Struct)]
CURONE hiadmin; ===============
有什么方法可以解决啊!
char name[20];
char passwd[20];
}CURONE;
typedef struct{ CURONE admin;
CURONE hiadmin[10];
CURONE hipasswd[10];}WHOLE;BOOL GET_PARAM(char *sname,char *url,WHOLE &w)
{
//对w 的结构体进行处里
}
我的C#代码如下:
public struct CURONE{
[MarshalAs(UnmanagedType.ValTChar,SizeConst=20)]
string name;
[MarshalAs(UnmanagedType.ValTChar,SizeConst=20)]
string passwd;
}public struct WHOLE{ [MarshalAs(UnmanagedType.Struct)] //正确
CURONE admin;
[MarshalAs(UnmanagedType.Struct,SizeConst=10)]
CURONE hiadmin[]; // 报错,类型不对
[MarshalAs(UnmanagedType.Struct,,SizeConst=10)]
CURONE hipasswd[]; //报错, 类型不对}经过测试,对结构数组,不按数组操作,确能够通过,当然只能得到 hiadmin[0] 的值了。
[MarshalAs(UnmanagedType.Struct)]
CURONE hiadmin; ===============
有什么方法可以解决啊!
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential, CharSet=System.Runtime.InteropServices.CharSet.Ansi)]
public struct CURONE {
[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst=20)]
public string name;
[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst=20)]
public string passwd;
}[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct WHOLE {
public CURONE admin;
[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst=10, ArraySubType=System.Runtime.InteropServices.UnmanagedType.Struct)]
public CURONE[] hiadmin;
[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst=10, ArraySubType=System.Runtime.InteropServices.UnmanagedType.Struct)]
public CURONE[] hipasswd;
}
public struct CURONE
{
/// char[20]
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public string name; /// char[20]
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public string passwd;
}[StructLayout(LayoutKind.Sequential)]
public struct WHOLE
{
/// CURONE->Anonymous_968e0614_bde3_4620_922f_d5159450a488
public CURONE admin; /// CURONE[10]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10, ArraySubType = UnmanagedType.Struct)]
public CURONE[] hiadmin; /// CURONE[10]
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10, ArraySubType = UnmanagedType.Struct)]
public CURONE[] hipasswd;
}
P/Invoke Interop Assistant
w.admin.passwd="p1";w.hiadmin[0].name="cctv";
w.hiadmin[0].passwd="yyy";....将这个结构w 传入函数时,出现错误,调试窗口一看,hiadmin 值为NULL, 而 admin 值是存在的。
w.hiadmin[0] = new CURONE();
w.hiadmin[0].name="cctv";
w.hiadmin[0].passwd="yyy";
大哥,你要先初始化才能赋值啊