Как мне P/вызвать функцию C, которая возвращает объединенную структуру?
PInvoke возвращает тип C с объединением
Ответы (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