2009-02-13 12 views
12

Kütüphaneler libtorque.so ktypes kullanarak global olarak bildirilen bir int değeri pbs_errno eşlemek istiyorum.Ortak bir kitaplıktan genel bir değişkenin harita kümeleriyle eşleştirilmesi

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

başarıyla fonksiyonları bir demet haritalandırdık:

Şu anda şöyle kitaplığı yükleyebilirsiniz. Ancak, hata denetimi için, bunların çoğu pbs_errno değişkenini ayarladı, böylece buna da ihtiyacım var. Bunu erişmeye çalışırsanız, ancak ben alıyorum:

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

, bir işlev işaretçisi değil ve bir seg arıza sonuçlanır arama girişiminde.

Bu API başlık dosyaları ana başlıkta int pbs_errno; ve extern int pbs_errno; olarak ilan ediyor.

objdump olarak sembolünü gösterir:

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

ör: DLL dışa değerlerini artırmak konusunda ctypes dokümanlar bir kısmı vardır

00000000001294f8 g DO .bss 0000000000000004 Base  pbs_errno 
+0

John'un cevabı doğrudur. Restype'ın ayarlanması sadece fonksiyonun dönüş tipini değiştirir, AFAICT. Aslında pbs_errno işlevini bir işlev olarak denediysem, bir segfault ile sonuçlandı. –

cevap

16

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

Teşekkürler. Bir şekilde, dokümanlar kullanılırken bu bölümü kaçırdım. Bir ton farklı içeriğe sahip, bakması kolay ve dikkati çekmeyen büyük bir kılavuz: / –

İlgili konular