Zuordnen einer globalen Variablen in einer gemeinsam genutzten Bibliothek mit ctypes

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

  •  23-08-2019
  •  | 
  •  

Frage

Ich möchte einen int-Wert pbs_errno als global in der Bibliothek libtorque.so mit ctypes erklärt abzubilden.

Zur Zeit kann ich die Bibliothek laden etwa so:

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

und hat erfolgreich eine Reihe von Funktionen abgebildet. Doch für Fehler Prüfzwecken viele von ihnen die pbs_errno Variable gesetzt, damit ich Zugriff auf das auch brauchen. Allerdings, wenn ich versuche, darauf zuzugreifen, erhalte ich:

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

Natürlich ist es nicht ein Funktionszeiger und versucht, sie in einem seg Fehler führen zu nennen.

Es ist, als int pbs_errno; im Haupt-Header und extern int pbs_errno; in den API-Header-Dateien deklariert.

objdump zeigt das Symbol wie:

00000000001294f8 g    DO .bss   0000000000000004  Base        pbs_errno
War es hilfreich?

Lösung

Es gibt einen Abschnitt in der ctypes docs über Werte exportierten in DLLs zugreifen:

http://docs.python.org/ Bibliothek / ctypes.html # zugreifenden-Werte-Export-from-dlls

z.

def pbs_errno():
    return c_int.in_dll(libtorque, "pbs_errno")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top