PInvoke возвращает тип C с объединением

Как мне P/вызвать функцию C, которая возвращает объединенную структуру?


person joemoe    schedule 13.12.2009    source источник


Ответы (2)


Вам нужно будет использовать StructLayout явного и FieldOffset.

Пример использования:

<StructLayout(LayoutKind.Explicit, Size:=4)> _
   Public Structure DWord
      <FieldOffset(0)> Public Value As Int32
      <FieldOffset(0)> Public High As Int16
      <FieldOffset(2)> Public Low As Int16
   End Structure
person DanStory    schedule 13.12.2009

Чтобы создать простую структуру для C, вы используете [StructLayout(LayoutKind.Sequential)] для структуры. Чтобы сделать простое объединение для C, вы используете [StructLayout(LayoutKind.Explicit)] и даете всем полям [FieldOffset(0)]. Для более сложных структур вложите эти два типа структур друг в друга, если это необходимо! Если это не работает правильно, вы всегда можете проанализировать структуру, созданную в C, выяснить, где находятся все поля, и использовать LayoutKind.Explicit с правильными смещениями полей для каждого поля.

person KernelJ    schedule 13.12.2009