[Python-de] Zeiger an eine DLL übergeben...

Thilo Ernst Thilo.Ernst at dlr.de
Thu Feb 7 10:19:35 EST 2002


"Vollmer, Marc" schrieb:

> Hallo,
>
> ich stehe zur Zeit auf dem Schlauch. Ich möchte gerne eine Funktion aus
> einer DLL nutzen. Definition aus der Header:
>
> long get_position(long axis, double * position);
>
> Die Einbindung über windll funktioniert, aber was übergebe ich der Funktion
> als Zeiger. Ich denke, ich habe es mal gewußt, aber keine Chance mehr.

Falls Du zu windll keine ausreichenden Infos bekomst (sorry, habe ich auch nicht),
was hältst Du davon, aus Deiner DLL eine echte Python-Extension zu machen?

Im Prinzip läuft es darauf hinaus, eine kleine Wrapper-Routine in C zu schreiben,
die das Python-Objekt für das Eingabeargument (axis) hernimmt, dort den double-
Wert herausholt, einen Temporärpuffer für das Ausgabeargument alloziert (als lokale
Variable auf dem Stack reicht), mit beidem get_position aufruft,  und schliesslich
das Ergebnis aus position wieder in ein Python-Objekt packt.  (Details siehe
www.python.org, Dokumentation, 'Extending and Embedding the Python Interpreter.)
Die Handarbeit kann man sich heute dank eines hervorragenden Werkzeugs
(SWIG, www.swig.org) aber sparen. Du brauchst allerdings einen C-Compiler.
Falls Du kein MS-VC++ verfügbar hast, kann  ich Dir z.B. DigitalMars C++ empfehlen
(ehemals Symantec), gibt's frei bei www.digitalmars.com .

Am Ende kannst Du einfach p=get_position(a) aufrufen, ohne dass auf Python-Ebene
vorher und nachher irgendwelche Konvertierungen nötig wären.

- Thilo Ernst





More information about the Python-de mailing list