2009-02-13 80 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

相关问题