Marshaling uma matriz de caracteres de comprimento fixo bidimensional C ++ como um membro da estrutura
Estou tentando chamar uma função C ++ não gerenciada, que tem uma estrutura como parâmetro de entrada. A estrutura é definida no arquivo de cabeçalho assim:
struct MyStruct
{
int siOrder;
char aaszNames[6][25];
int siId[6];
int siTones[6];
};
Tentei declarar a estrutura gerenciada da seguinte maneira:
[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;
}
Mas sem nenhum sucesso. Suponho que o empacotamento falhe, pois o aaszNames é na verdade uma matriz de seis seqüências de 25 terminações nulas. Eu tentei declarar aaszNames como
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst=150)]
public char[] aaszNames;
preenchendo a matriz com nulos, quando necessário. Mas, novamente, nada.
Há algo que estou perdendo? O que eu estou errado? Qual é a melhor maneira de organizar esse conjunto de caracteres 2-D?
Alguma dica, por favor.