ctypes中的结构内联合语法

Mik*_*and 8 python ctypes

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

假设我想实现一个INPUT结构(见这里):

typedef struct tagINPUT {
  DWORD type;
  union {
    MOUSEINPUT    mi;
    KEYBDINPUT    ki;
    HARDWAREINPUT hi;
  } ;
} INPUT, *PINPUT;
Run Code Online (Sandbox Code Playgroud)

我应该还是需要更改以下代码?

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

class INPUT(Structure):
    _fields_ = [("type", DWORD),
                (INPUTTYPE)]
Run Code Online (Sandbox Code Playgroud)

不确定我可以为联合使用一个未命名的字段,但添加一个未在Win32API中定义的名称似乎很危险.

谢谢,

麦克风

Mar*_*ark 8

您的Structure语法无效:

AttributeError: '_fields_' must be a sequence of pairs
Run Code Online (Sandbox Code Playgroud)

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

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