日期:2014-05-18  浏览次数:21715 次

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;
}