Маршалинг структуры C# --> C

Узнай цену своей работы

Формулировка задачи:

В неуправляемом коде (bla.dll) есть структура:
typedef struct {
        ULONG32 a;
        UINT8 b[8];
        UINT8 c;
        UINT16 d;           
        ULONG32 e;
    } mystruct_t;
и метод, который принимает указатель на эту структуру в качестве параметра: DECLHEAD INT16 Method(UINT8 chan, mystruct_t * ss); в управляемом коде c# структура:
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;
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5
Похожие ответы