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