Я пытаюсь вызвать неуправляемую функцию С++, которая имеет структуру в качестве входного параметра. Структура определяется в заголовочном файле следующим образом:
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;
заполнение массива нулями там, где это необходимо. Но, опять же, ничего.
Есть ли что-то, что мне не хватает? Что я не так? Каков наилучший способ маршалирования этого двумерного массива символов?
Любые подсказки, пожалуйста.