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.

questionAnswers(4)

yourAnswerToTheQuestion