2012-01-20 55 views
0

說我有下面的C代碼:的Python ctypes的,有結構的typedef工作

typedef struct _test test; 

struct _test { 
    test* just_a_test; 
    char* just_a_char; 
}; 

將在下面的實施工作?

class test(Structure): 
    _fields_ = [ 
     ('just_a_test', POINTER(test)), 
     ('just_a_char', c_char_p), 
    ] 

我只是困惑於結構中的第一個指針。

回答

3

您的代碼將不會在其引用test的時間,因爲工作,類尚未建立。

在​​15.17.1.16. Incomplete Types文檔中所述此確切的問題。

的解決方案是設置_fields_之後創建類:

class test(Structure): 
    pass 
test._fields_ = [ 
    ('just_a_test', POINTER(test)), 
    ('just_a_char', c_char_p), 
]