ctypes中的结构内联合语法

时间:2010-08-13 19:50:42

标签: python ctypes

有关ctypes语法的快速提问,因为对于像我这样的初学者来说,Unions的文档并不清楚。

我想要实现一个INPUT结构(参见here):

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 个答案:

答案 0 :(得分:8)

您的Structure语法无效:

AttributeError: '_fields_' must be a sequence of pairs

我相信你想在你的ctypes.Structure中使用anonymous属性。看起来ctypes文档创建了一个TYPEDESC结构(在结构上与tagINPUT非常相似)。

另请注意,您必须将DWORD定义为您平台的基本类型。