تعيين متغير عالمي من مكتبة مشتركة مع ctypes

StackOverflow https://stackoverflow.com/questions/544173

  •  23-08-2019
  •  | 
  •  

سؤال

أود تعيين قيمة int pbs_errno أعلن كعمل عالمي في المكتبة libtorque.so باستخدام ctypes.

حاليا يمكنني تحميل المكتبة مثل ذلك:

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

وقد حددت بنجاح حفنة من الوظائف. ومع ذلك، من أجل التحقق من الأخطاء أغراض العديد منهم ضبط pbs_errno متغير لذلك أحتاج إلى الوصول إلى ذلك أيضا. ومع ذلك، إذا حاولت الوصول إليها، احصل على:

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

بالطبع، ليس مؤشر دالة ومحاولة الاتصال به يؤدي إلى خطأ SEG.

انها أعلن كما int pbs_errno; في الرأس الرئيسي و extern int pbs_errno; في ملفات رأس API.

Objdump يظهر الرمز كما:

00000000001294f8 g    DO .bss   0000000000000004  Base        pbs_errno
هل كانت مفيدة؟

المحلول

يوجد قسم في مستندات CTTYPES حول الوصول إلى القيم المصدرة في DLLS:

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

على سبيل المثال

def pbs_errno (): ارجع c_int.in_dll (libtorque، "pbs_errno")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top