2010-08-13 12 views
8

Pregunta rápida sobre la sintaxis de ctypes, ya que la documentación para Unions no está clara para un principiante como yo.Sintaxis de unión dentro de la estructura en ctypes

decir que quiero poner en práctica una estructura de entrada (consulte here):

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

¿Debo o tengo que cambiar el siguiente código?

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

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

No estoy seguro de que puedo tener un campo sin nombre para el sindicato, pero la adición de un nombre que no está definido en el Win32API parece peligroso.

Gracias,

Mike

Respuesta

7

Su sintaxis La estructura no es válido:

AttributeError: '_fields_' must be a sequence of pairs 

Creo que desee utilizar el atributo anonymous en su ctypes.Structure. Parece que la documentación de ctypes crea una estructura TYPEDESC (que es muy similar en construcción a tagINPUT).

También tenga en cuenta que usted tiene que definir DWORD como un tipo base para su plataforma.

Cuestiones relacionadas