Я получаю обратные вызовы из C++ DLL и нужно принять на структуру вида:Вызов C++ DLL из C# с профсоюзами
typedef struct {
union {
SXAnyDevice any_device;
SXInternalDevice internal;
SXExternalDevice external;
}
int device_type;
} SXDevice;
я создал структур, на которые ссылаются в C# и установил явные но у меня есть проблема с установкой FieldOffset для поля device_type, поскольку ссылочные структуры в объединении не имеют одинакового размера.
[StructLayout(LayoutKind.Explicit, CharSet=CharSet.Ansi)]
public struct SXDevice {
[FieldOffset(0)]
public SXAnyDevice any_device;
[FieldOffset(0)]
public SXInternalDevice internal_device;
[FieldOffset(0)]
public SXExternalDevice external_device;
[FieldOffset(**Not sure how to handle this**)]
public int device_type;
}
Любые идеи, как лучше всего это сделать?
Блестящий, я отдам это. Есть ли способ включить что-то в определение структуры, а я не уверен, как лучше всего устанавливать смещения во время выполнения? –
@David Извините, но я не понимаю, что вы имеете в виду ... –
У меня есть fieldoffset как атрибут в структуре. Я не могу поместить sizeof (SXAnyDevice) в качестве параметра fieldoffset, поскольку компилятор жалуется, что атрибут атрибута должен быть константным выражением, выражением типа или выражением для создания массива. –