2010-08-13 35 views
8

關於ctypes語法的快速問題,作爲聯盟的文檔對於像我這樣的初學者並不清楚。ctypes中的聯合內部結構語法

說我要實現輸入結構(見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的定義的名稱似乎是危險的。

感謝,

邁克

回答

7

你的結構語法無效:

AttributeError: '_fields_' must be a sequence of pairs 

我相信你想使用的anonymous屬性,在ctypes.Structure。它看起來像ctypes文檔創建一個TYPEDESC結構(這是非常類似於tagINPUT結構)。

另請注意,您必須將DWORD定義爲您的平臺的基本類型。