Союз-в-синтаксическая структура в под


Быстрый вопрос о синтаксисе ctypes, поскольку документация для Союзов не понятна новичку вроде меня.

Скажем, я хочу реализовать входную структуру (см. здесь):

typedef struct tagINPUT {
  DWORD type;
  union {
    MOUSEINPUT    mi;
    KEYBDINPUT    ki;
    HARDWAREINPUT hi;
  } ;
} INPUT, *PINPUT;

Должен ли я или мне нужно изменить следующий код?

class INPUTTYPE(Union):
    _fields_ = [("mi", MOUSEINPUT),
                ("ki", KEYBDINPUT),
                ("hi", HARDWAREINPUT)]

class INPUT(Structure):
    _fields_ = [("type", DWORD),
                (INPUTTYPE)]

Не уверен, что у меня может быть Безымянное поле для объединения, но добавление имени, которое не определено в Win32API, кажется опасным.

Спасибо,

Майк

1 8

1 ответ:

Синтаксис вашей структуры недопустим:

AttributeError: '_fields_' must be a sequence of pairs

Я полагаю, что вы хотите использовать атрибут anonymous в ваших ctypes.Структура. Похоже, что документация ctypes создает структуру TYPEDESC (которая очень похожа по конструкции на tagINPUT).

Также обратите внимание, что вам придется определить DWORD как базовый тип для вашей платформы.