Я пытаюсь маршалировать следующие структуры от C++ до C# в программе Windows CE и компактной структуре 2.0. У меня много трудностей с сортировкой строк.Маршаллинг массив структур от C++ до C# в WinCE
У меня есть этот C++ код:
#define Console_Parameters_MAX 50
struct AllParameters {
Parameter Parameters[Console_Parameters_MAX];
} ;
struct Parameter {
int Index;
int Id;
char Value[20];
};
extern "C" {
BOOL GetAllConsoleParameters(AllParameters *pItem);
}
и это есть соответствующий C# код:
[StructLayout(LayoutKind.Sequential)]
public struct AllParameters {
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 50)]
public Parameter[] Parameters
}
[StructLayout(LayoutKind.Sequential)]
public struct Parameter {
public int Index;
public int Id;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public byte[] Value;
}
[DllImport("exemple.dll", SetLastError = true)]
public static extern bool GetAllConsoleParameters([MarshalAs(UnmanagedType.Struct)] ref AllParameters pItem);
и это, как я вызываю его:
AllParameters item = new AllParameters();
if (AppAPI.GetAllConsoleParameters(ref item)) {
var array = item.Parameters;
}
Когда я звоню в GetAllConsoleParameters я получаю исключение NotSupportedException. Я пробовал много конфигураций, но без успеха.
Может ли кто-нибудь посоветовать, как его достичь?
Заранее спасибо
Что такое послание исключение? – cubrr
Строка sttring является классом и не эквивалентна массиву char. IN C++ символьные массивы заканчиваются на '\ 0'. Таким образом, в C# используйте байт [] вместо массива char. – jdweng
Я не использовал C++ довольно долго, но я уверен, что 'char []' и 'string []' не эквивалентны. Я думаю, вам может понадобиться просто 'string' в вашем коде C#. – Sean