تعيين متغير عالمي من مكتبة مشتركة مع ctypes
سؤال
أود تعيين قيمة 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")
لا تنتمي إلى StackOverflow