Chciałbym odwzorować wartość int pbs_errno
zadeklarowaną jako globalna w bibliotece libtorque.so
przy użyciu ctypes.Mapowanie zmiennej globalnej z biblioteki współużytkowanej z ctypami
Obecnie mogę załadować biblioteki tak:
from ctypes import *
libtorque = CDLL("libtorque.so")
i pomyślnie mapowane kilka funkcji. Jednak dla celów sprawdzania błędów wielu z nich ustawi zmienną pbs_errno
, więc potrzebuję również dostępu do tej zmiennej. Jednak gdy próbuję uzyskać do niego dostęp uzyskać:
>>> pytorque.libtorque.pbs_errno
<_FuncPtr object at 0x9fc690>
Oczywiście, nie jest to wskaźnik funkcji i próbują nazwać to skutkuje winy seg.
Jest zadeklarowany jako int pbs_errno;
w nagłówku głównym i extern int pbs_errno;
w plikach nagłówkowych interfejsu API.
objdump pokazuje symbol jako:
00000000001294f8 g DO .bss 0000000000000004 Base pbs_errno
Odpowiedź Johna jest prawidłowa. Ustawienie typu restykcji zmienia tylko typ zwracanej funkcji, AFAICT. Gdybym rzeczywiście próbował wywołać funkcję pbs_errno jako funkcję, to skutkowałby ona uszkodzeniem. –