Seite 1 von 1

Mit Python auf die c-bibliotheken zugreifen

Verfasst: Donnerstag 29. August 2002, 13:01
von boing
wie greife ich mit Python auf die c-bibliotheken zu ?

danke im Voraus

Re: Mit Python auf die c-bibliotheken zugreifen

Verfasst: Freitag 30. August 2002, 08:51
von joerg
boing hat geschrieben:wie greife ich mit Python auf die c-bibliotheken zu ?

Prinzipiell muß man einen Wrapper schreiben, um auf beliebige C-Bibliotheken zugreifen zu können. Ein Wrapper ist ein Stückchen C-Code, was die C-Funktionen auf Python-Methoden abbildet und die Datentypen konvertiert. Doku dazu ist die Dokumentation zum C-API von Python. Auf diese Weise kann man auch C++ oder Fortran-Routinen anbinden.

Für umfangreiche Bibliotheken empfehle ich einen sogenannten Interface-generator, der aus den Headerfiles der C-Bibliothek mehr oder weniger automatisch den Wrappercode generiert. Am bekanntesten ist hier SWIG, der neben Python auch TCL,Perl uvam. anbinden kann.

Wenn es nur wenige Funktionen sind, die angebunden werden sollen, mache ich sowas lieber per Hand, da kann man das Design der Python-Schnittstelle besser beeinflussen, z.B. die reinen Funktionen objektorientiert verpacken...

Unter Windows kenne ich mich nicht aus, aber da gibt es - glaube ich - die Möglichkeit direkt Funktionen aus den DLLs anzusprechen.

manuel einen Wrapper erstellen

Verfasst: Montag 2. September 2002, 09:56
von boing
hallo Joerg,

erstmal vielen Dank für den Tip.

könnten Sie vielleicht es mir an einem Beispiel zeigen. Ich habe als Attachments zwei kleine Anwendungen dazu geschickt.

danke im Vorraus.

------------

/* Dies ist ein Programm in C */

#include <stdio.h>

class person
{
private:
char* name;
char* geschlecht;
public:
void set_name(char* n) { name = n; }
void set_geschlecht(char* g) { geschlecht = g; }
char* get_name() {return name;}
char* get_geschlecht() {return geschlecht;}
};


void main()
{
/*
person student;
student.set_name("Peter");
student.set_geschlecht("mannlich");
printf("Name : ");
printf(student.get_name());
printf("\nGeschlecht : ");
printf(student.get_geschlecht());
printf("\n<<< ende\n");
*/
}


------------

# dies ist ein Python-Programm

# hier instanzierung der Klasse person aus punkt.cpp

print "<<< ende"

Verfasst: Montag 2. September 2002, 10:27
von piddon
In dem buch 'Python 2 . Einführung und Referenz der objektorientierten Skriptsprache' gibt es ein Kapitel über einbetten in C und umgekehrt.

Dort solltest du weitere Informationen finden.

Re: manuel einen Wrapper erstellen

Verfasst: Montag 2. September 2002, 17:13
von joerg
boing hat geschrieben:hallo Joerg,
...
könnten Sie vielleicht es mir an einem Beispiel zeigen. Ich habe als Attachments zwei kleine Anwendungen dazu geschickt.
...
danke im Vorraus.
Sorry, aber das würde diesen Rahmen und auch meine Zeit etwas sprengen. Auf www.python.org gibt es diverse Doku dazu, z.B. unter http://www.python.org/doc/Hints.html im Abschnitt "Extending and Embedding".

Außerdem sieht mir der Code eher nach C++ aus, das wird noch etwas komplexer, wenn man die C++-Klassen flexibel auf Python-Klassen oder -Types abbilden will. Auch dazu gibt es verschiedene beschriebene Ansätze in der Doku. Python ab 2.2 bietet da wohl auch noch mehr Möglichkeiten, damit kenne ich mich auch noch nicht aus.

Viel Glück

Jörg