有关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中定义的名称似乎很危险.
谢谢,
麦克风
您的Structure语法无效:
AttributeError: '_fields_' must be a sequence of pairs
Run Code Online (Sandbox Code Playgroud)
我相信你想在你的ctypes.Structure中使用匿名属性.看起来ctypes文档创建了一个TYPEDESC结构(它在构造上与tagINPUT非常相似).
另请注意,您必须将DWORD定义为平台的基本类型.
| 归档时间: |
|
| 查看次数: |
3032 次 |
| 最近记录: |