Маршалинг двумерного массива char фиксированной длины в C ++ в качестве члена структуры
Я пытаюсь вызвать неуправляемую функцию C ++, которая имеет структуру в качестве входного параметра. Структура определяется в заголовочном файле следующим образом:
struct MyStruct
{
int siOrder;
char aaszNames[6][25];
int siId[6];
int siTones[6];
};
Я попытался объявить управляемую структуру следующим образом:
[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;
}
Но без какого-либо успеха. Я предполагаю, что маршалинг завершился неудачно, поскольку aaszNames на самом деле представляет собой массив из шести длинных строк с нулем в конце, равных 25. Я пытался объявить aaszNames как
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst=150)]
public char[] aaszNames;
заполнение массива нулями, где это необходимо. Но опять же ничего.
Есть ли что-то, что мне не хватает? Что я не прав? Каков наилучший способ упорядочить этот массив двумерных символов?
Любые намеки, пожалуйста.