Маршалинг структуры 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д