小编TTh*_*eot的帖子

将C++二维固定长度char数组编组为结构成员

我试图调用一个非托管C++函数,它具有一个结构作为输入参数.结构在头文件中定义如下:

struct MyStruct
{
int     siOrder;
char     aaszNames[6][25];
int     siId[6];
int     siTones[6];        
};
Run Code Online (Sandbox Code Playgroud)

我试图将托管结构声明如下:

[StructLayoutAttribute(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
public struct MyStruct {

public int siOrder;

[MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst=150)]
public string aaszNames;

[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst=6, ArraySubType=UnmanagedType.I4)]
public int[] siId;

[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst=6, ArraySubType=UnmanagedType.I4)]
public int[] siTones;
}
Run Code Online (Sandbox Code Playgroud)

但没有任何成功.我猜测编组失败了,因为aaszNames实际上是一个由六个25长的空终止字符串组成的数组.我尝试将aaszNames声明为

 [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst=150)]
 public char[] aaszNames;
Run Code Online (Sandbox Code Playgroud)

必要时用空值填充数组.但是,再一次,没有.

有什么我想念的吗?我错了什么?编组这个2-D char数组的最佳方法是什么?

请给我任何提示.

c# c++ struct marshalling multidimensional-array

4
推荐指数
1
解决办法
5253
查看次数

标签 统计

c# ×1

c++ ×1

marshalling ×1

multidimensional-array ×1

struct ×1