代码之家  ›  专栏  ›  技术社区  ›  MikeRand

ctypes结构语法中的并集

  •  8
  • MikeRand  · 技术社区  · 14 年前

    假设我想要实现一个输入结构(参见 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 回复  |  直到 14 年前
        1
  •  10
  •   Mark    14 年前

    您的结构语法无效:

    AttributeError: '_fields_' must be a sequence of pairs
    

    我相信你想用 anonymous 属性ctypes.结构. ctypes文档似乎创建了一个 TYPEDESC 结构(在构造上与tagINPUT非常相似)。

    还要注意,您必须将DWORD定义为平台的基类型。