首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c#如何定义结构体中的二维数组

2012-08-16 
c#怎么定义结构体中的二维数组我在c++中定义了一个这样的结构typedef struct Field55{char ctag[100][5]i

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

热点排行