wie greife ich mit Python auf die c-bibliotheken zu ?
danke im Voraus
Mit Python auf die c-bibliotheken zugreifen
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.
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"
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"
-
- Gründer
- Beiträge: 410
- Registriert: Dienstag 30. Juli 2002, 18:03
- Wohnort: Oestrich-Winkel
- Kontaktdaten:
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.
Dort solltest du weitere Informationen finden.
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
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".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.
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