c#怎么定义结构体中的二维数组
我在c++中定义了一个这样的结构
typedef struct Field55
{
char ctag[100][5];
int iLen[100];
char cValue[100][512];
}ICINFOTEMP;
然后再c#中这样定义
public struct ICINFO
{
[MarshalAsAttribute(UnmanagedType.ByValArray,SizeConst = 100*5)]
public string [] tag;
[MarshalAsAttribute(UnmanagedType.ByValArray,SizeConst = 100)]
public int [] Len;
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 100 * 512)]
public string [] Value;
}
编译时报错“内部限制:结构太复杂或太大”。请问大大,该如何修改?
------解决方案--------------------
封送多维(2维以上)的数组,一直是互操作的难题!远非4楼所说那么简单,根据以往经验,我总结了一个办法:
将数组尾数扁平化,变成一维数组,以楼主的结构体中 char cValue[100][512];为例:
1、定义子结构体:
[StructLayout(LayoutKind.Sequential)]
public struct str
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
public string name;
}
2、外层结构体:对于C++:
[StructLayout(LayoutKind.Sequential)]
public struct ICINFO
{
............
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)] [b]//注意:这里对应一维数组[/b]
public str[] name;
}