2009-02-13 56 views
12

我想使用ctypes映射在庫libtorque.so中聲明爲全局的int值pbs_errno使用ctypes映射來自共享庫的全局變量

目前我可以加載庫,像這樣:

from ctypes import * 
libtorque = CDLL("libtorque.so") 

,並已成功繪製了一堆的功能。但是,出於錯誤檢查的目的,他們中的很多人都設置了pbs_errno變量,所以我也需要訪問該變量。但是,如果我嘗試訪問它,我得到:

>>> pytorque.libtorque.pbs_errno 
<_FuncPtr object at 0x9fc690> 

當然,它不是一個函數指針,並試圖把它導致賽格故障。

在主標題中聲明爲int pbs_errno;,在API頭文件中聲明爲extern int pbs_errno;

objdump顯示符號爲:

00000000001294f8 g DO .bss 0000000000000004 Base  pbs_errno 
+0

John的回答是正確的。設置restype只會改變函數的返回類型AFAICT。如果我真的試圖將pbs_errno作爲函數調用,則會導致段錯誤。 – 2009-02-13 16:10:42

回答

16

有一個在ctypes的文檔有關訪問DLL中導出的值的部分:

http://docs.python.org/library/ctypes.html#accessing-values-exported-from-dlls

例如

 
def pbs_errno(): 
    return c_int.in_dll(libtorque, "pbs_errno") 
+0

謝謝。不知何故,我在使用文檔時錯過了該部分。這是一本很大的手冊,內容豐富,易於瀏覽,不會注意到:/ – 2009-02-13 16:09:53

相關問題