Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
ctypes from C import * Steven Mohr <steven.mohr@dlr.de> TechTalk, DLR Köln, 27. Januar 2009
Gliederung <ul><li>Was ist CTypes ? </li></ul><ul><li>Libraries </li></ul><ul><li>Datentypen </li></ul><ul><ul><li>Einfach...
1. Was ist ctypes? <ul><li>Erlaubt es C-Bibliotheken zu laden und zu benutzen (Foreign function interface) </li></ul><ul><...
2. Bibliotheken <ul><li>Laden der Bibliotheken: </li></ul><ul><li>Erstellen eines CDLL oder WinDLL-Objektes </li></ul><ul>...
3. Datentypen
3.1 Einfache Datentypen <ul><li>ctypes bietet Objekte für alle C-Standarddatentypen </li></ul><ul><li>Bespiele: </li></ul>...
3.2 Pointer <ul><li>Erzeugung von Pointern: </li></ul><ul><li>Mittels der pointer-Funktion </li></ul><ul><li>i = c_int(42)...
3.3 Arrays <ul><li>Arraytyp erzeugen: </li></ul><ul><li>FiveIntArray = c_int * 5 </li></ul><ul><li>Instanzierung: </li></u...
3.4 Strukturierte Datentypen <ul><li>ctypes stellt Union und Structure als Objekte zur Verfügung </li></ul><ul><li>Alle C-...
4. Funktionen <ul><li>Zugriff auf Funktionen: </li></ul><ul><li>Funktionen sind Elemente des Bibliotheken-Objektes </li></...
4. Funktionen <ul><li>Rückgabewerte: </li></ul><ul><li>Standard: int </li></ul><ul><li>Sonst: Setzen über das Attribut res...
5. Automatische Codegenerierung <ul><li>CTypesLib mit GCCXML </li></ul><ul><li>2 Skripte: h2xml.py und xml2py.py </li></ul...
6. Quellen <ul><li>ctypes-Doku:  http://docs.python.org/library/ctypes.html#module-ctypes </li></ul><ul><li>Guy K. Kloß: A...
Nächste SlideShare
Wird geladen in …5
×

Ctypes

2.097 Aufrufe

Veröffentlicht am

TechTalk von Steven Mohr (27.01.2009)

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Ctypes

  1. 1. ctypes from C import * Steven Mohr <steven.mohr@dlr.de> TechTalk, DLR Köln, 27. Januar 2009
  2. 2. Gliederung <ul><li>Was ist CTypes ? </li></ul><ul><li>Libraries </li></ul><ul><li>Datentypen </li></ul><ul><ul><li>Einfache Datentypen </li></ul></ul><ul><ul><li>Pointer </li></ul></ul><ul><ul><li>Arrays </li></ul></ul><ul><ul><li>Strukturierte Datentypen </li></ul></ul><ul><li>Funktionen </li></ul><ul><li>Automatische Codegenerierung </li></ul><ul><li>Quellen </li></ul>
  3. 3. 1. Was ist ctypes? <ul><li>Erlaubt es C-Bibliotheken zu laden und zu benutzen (Foreign function interface) </li></ul><ul><li>Erstellung „C-kompatibler“ Pythonobjekte </li></ul><ul><li>Gehört zur Python-Standardbibliothek </li></ul>
  4. 4. 2. Bibliotheken <ul><li>Laden der Bibliotheken: </li></ul><ul><li>Erstellen eines CDLL oder WinDLL-Objektes </li></ul><ul><li>libc = cdll.LoadLibrary(„libc.so.6“) </li></ul><ul><li>libc = CDLL(„libc.so.6“) </li></ul><ul><li>Art des Ladens: </li></ul><ul><li>now: alle Symbole werden sofort aufgelöst </li></ul><ul><li>lazy: alle Symbole werden bei Bedarf aufgelöst </li></ul><ul><li>global: die Symbole stehen zur Auflösung von Symbolen anderer Bibliotheken bereit </li></ul><ul><li>local: die Symbole stehen nicht zur Auflösung bereit </li></ul>
  5. 5. 3. Datentypen
  6. 6. 3.1 Einfache Datentypen <ul><li>ctypes bietet Objekte für alle C-Standarddatentypen </li></ul><ul><li>Bespiele: </li></ul>Python-Typ C-Typ ctypes Datentyp float float c_float int unsigned int c_uint int short c_short 1-character string char c_char
  7. 7. 3.2 Pointer <ul><li>Erzeugung von Pointern: </li></ul><ul><li>Mittels der pointer-Funktion </li></ul><ul><li>i = c_int(42) </li></ul><ul><li>pi = pointer(i) </li></ul><ul><li>Zugriff auf Werte: </li></ul><ul><li>>>> pi.contents </li></ul><ul><li>c_int(42) </li></ul><ul><li>Ändern der Referenz: </li></ul><ul><li>>>> pi.contents = c_int(60) </li></ul><ul><li>>>> pi.contents </li></ul><ul><li>c_int(42) </li></ul>
  8. 8. 3.3 Arrays <ul><li>Arraytyp erzeugen: </li></ul><ul><li>FiveIntArray = c_int * 5 </li></ul><ul><li>Instanzierung: </li></ul><ul><li>array1 = FiveIntArray() </li></ul><ul><li>array2 = FiveIntArray(1, 2, 3, 4, 5) </li></ul><ul><li>Zugriff: </li></ul><ul><li>>>> array1[2] </li></ul><ul><li>0 </li></ul><ul><li>>>> array2[2] </li></ul><ul><li>3 </li></ul>
  9. 9. 3.4 Strukturierte Datentypen <ul><li>ctypes stellt Union und Structure als Objekte zur Verfügung </li></ul><ul><li>Alle C-Strukturen erben hiervon </li></ul><ul><li>Aufbau der Struktur wird in Attribut _fields_ bestimmt => Liste von 2-Tupeln mit Name und Typ </li></ul><ul><li>Einfache Initialisierung: Constructor weist übergebene Werte der Reihe nach zu oder direkte Angabe als Key-Value-Paar </li></ul><ul><li>>>> from ctypes import * </li></ul><ul><li>>>> class POINT(Structure): </li></ul><ul><li>... _fields_ = [(&quot;x&quot;, c_int), (&quot;y&quot;, c_int)] </li></ul><ul><li>>>> point = POINT(10, 20) </li></ul><ul><li>>>> print point.x, point.y </li></ul><ul><li>10 20 </li></ul>
  10. 10. 4. Funktionen <ul><li>Zugriff auf Funktionen: </li></ul><ul><li>Funktionen sind Elemente des Bibliotheken-Objektes </li></ul><ul><li>libc.printf(„Ich bin eine C-Funktion“) </li></ul><ul><li>None, integers, longs, byte strings und unicode strings können direkt an C-Funktionen übergeben werden </li></ul><ul><li>Übergabe von Parametern: </li></ul><ul><li>Python- oder ctypes-Objekte </li></ul><ul><li>By reference: Pointer-Objekt oder über byref() </li></ul><ul><li>Über das Attribut argtypes können die erlaubten Übergabewerte gesetzt werden </li></ul>
  11. 11. 4. Funktionen <ul><li>Rückgabewerte: </li></ul><ul><li>Standard: int </li></ul><ul><li>Sonst: Setzen über das Attribut restype des Funktionsobjektes </li></ul><ul><li>restype kann auch eine Pythonfunktion sein </li></ul><ul><li>Bedingung: eigentlicher Rückgabewert: Integer </li></ul><ul><li>Funktionen mit Pythonobjekten aufrufen: </li></ul><ul><li>Ctypes sucht ein Atrribut namens _as_parameter_ und nutzt dieses </li></ul>
  12. 12. 5. Automatische Codegenerierung <ul><li>CTypesLib mit GCCXML </li></ul><ul><li>2 Skripte: h2xml.py und xml2py.py </li></ul><ul><li>Generieren das Python-Wrappermodul </li></ul><ul><li>Python-orientierte Wrapper sind vielfach sinnvoll </li></ul><ul><li>Nachteile: </li></ul><ul><li>CTypesLib stark an einzelne GCCXML-Versionen gekoppelt </li></ul><ul><li>Konfiguration dieser Toolchain sehr komplex bzw. undurchsichtig </li></ul><ul><li>alledings: CTypesLib noch in der Entwicklung, frühes Stadium </li></ul>
  13. 13. 6. Quellen <ul><li>ctypes-Doku: http://docs.python.org/library/ctypes.html#module-ctypes </li></ul><ul><li>Guy K. Kloß: Automatic C Library Wrapping - Ctypes from the Trenches </li></ul><ul><li>The Python Papers, Vol. 3, No. 3 (2008) http://ojs.pythonpapers.org/index.php/tpp/issue/view/10 </li></ul>

×