Маршалинг структуры C# --> C
Формулировка задачи:
В неуправляемом коде (bla.dll) есть структура:
и метод, который принимает указатель на эту структуру в качестве параметра:
DECLHEAD INT16 Method(UINT8 chan, mystruct_t * ss);
в управляемом коде c# структура:
прототип метода:
Вызов метода:
Функция срабатывает, но ощущение, что в неуправляемый код вместо структуры ничего не передается
Пожалуйста, помогите настроить маршалинг.
typedef struct {
ULONG32 a;
UINT8 b[8];
UINT8 c;
UINT16 d;
ULONG32 e;
} mystruct_t;public struct MyStruct
{
public UInt32 a;
public byte[] b; //[8]
public byte c;
public UInt16 d;
public UInt32 e;
}[DllImportAttribute("bla.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
public static extern short Method(byte chan, ref MyStruct str);MyStruct Mystr = new MyStruct(); Mystr.a = 1; Mystr.b = new byte[8]; Mystr.c = 2; Mystr.d = 3; Mystr.e = 4; var q = Method(0,ref Mystr);
Решение задачи: «Маршалинг структуры C# --> C»
textual
Листинг программы
[StructLayout(LayoutKind.Sequential)]
public struct MyStruct
{
public UInt32 a;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public byte[] b;
public byte c;
public UInt16 d;
public UInt32 e;
}