Python und Pascal

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
rkager
User
Beiträge: 8
Registriert: Sonntag 17. Februar 2008, 19:03

Hallo board,

ich habe eine Anfrage von einem Kunden. Er hat eine bestehende Pascal Application und aus irgendeinem Grund möchte er, dass ich ihm eine Python Anwendung schreibe. :)

Jetzt meine Frage, wie können wir das Python Modul aus pascal aufrufen. Da das Modul mehrere Funktionen haben muss wäre mir zuerst eine .exe mit (py2exe) in den Sinn gekommen, die Übergabeparameter einliest. Jedoch ist er unbedingt der Meinung er möchte die Funktionen über eine .dll aufrufen. Hat da wer einen Plan? Kann man mit einem Modul (swig o.ä.) eine dll erstellen?

Danke für Eure Hilfe
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ich würde einfach boost-Python verwenden, damit lässt sich schnell eine DLL basteln. Der Zugriff von Pascal sollte dann nicht mehr so schwierig sein.

Die Anforderungen sind aber schon irgendwie ein wenig abenteuerlich.
Das Leben ist wie ein Tennisball.
rkager
User
Beiträge: 8
Registriert: Sonntag 17. Februar 2008, 19:03

Danke EyDu,

hast du vielleicht noch einen weiterführenden Link, habe jetzt nur die Erstellung einer C++ dll gefunden welche dann in Python aufgerufen werden kann. Ich benötige es aber anders rum. Aus einem python skript eine dll für c bzw. pascal zu machen..

Danke
Reinhard

PS.: verstehe auch nicht warum das gerade so laufen soll.. aber der Kunde ist König :)
BlackJack

IMHO sind das zu wenig Informationen. Eine DLL gibt es ja im Grunde schon — den Python-Interpreter, damit man ihn in andere Programme einbinden kann. Wenn man mit Delphi einfach auf C-DLLs zugreifen kann, dann ist es IMHO weniger das Problem wie man Python einem Delphi-Programm zur Verfügung stellt, sondern eher wie man die Delphi-Objekte, die von der Python-Seite gebraucht werden, dort zur Verfügung stellen kann‽
rkager
User
Beiträge: 8
Registriert: Sonntag 17. Februar 2008, 19:03

Das Python Skript soll im Endeffekt sich Daten von einem Laser Anschauen mit diese Berechnungen durchführen und dem aufrufenden Programm einen String zurückgeben. Als Parameter für den Aufruf muss ein String und ein integer übergeben werden. Übertrieben einfach soll das Python Skript so aussehen. Wobei eben im Skript (oder auf mehrer .py aufgeteilt) natürlich mit den Parameter gearbeitet wird ;-)

Code: Alles auswählen

def CalcThisData(filename, methode):
    CalculatedDataPath = "FromanotherSubroutineInsideofPythonScript"
    return CalculatedDataPath
Die Grundidee war eben irgendwie eine .dll aus den .py zu erstellen. Dass da natürlich ein Package benötigt wird, welches aus den python Datentypen und Funktion Pascal Datentypen / "Funktionsprototypen" macht war mir klar, wie es geht aber nicht..
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

BlackJack hat geschrieben:Wenn man mit Delphi einfach auf C-DLLs zugreifen kann, dann ist es IMHO weniger das Problem wie man Python einem Delphi-Programm zur Verfügung stellt, sondern eher wie man die Delphi-Objekte, die von der Python-Seite gebraucht werden, dort zur Verfügung stellen kann‽
Deshalb mein Vorschlag über boost zu gehen. Dann kann ein einfaches Interface mit nativen Daten bereitstellen, diese leicht in Python-Objekte umwandeln und direkt in den Interpreter schubsen. Der Weg scheint mir einfacher zu sein, als der direkte über die Python-DLL.

rkager hat geschrieben:hast du vielleicht noch einen weiterführenden Link, habe jetzt nur die Erstellung einer C++ dll gefunden welche dann in Python aufgerufen werden kann.
Embedding ist das Stichwort.
Das Leben ist wie ein Tennisball.
rkager
User
Beiträge: 8
Registriert: Sonntag 17. Februar 2008, 19:03

Danke EyDu,

damit sollte ich für das erste klar kommen.

Vor Jahren war ich einmal an einem Projekt beteiligt, dass glaub ich über SWIG eine echte .dll erstellt hat welche dann in ein c# Projekt eingebunden wurde. Ich war da aber nur bei der Python Entwicklung beteiligt und habe das nur am Rande mitbekommen und mich hat es damals auch nicht interessiert. Kann sich das jemand vorstellen, wie das gehen könnte?

Danke
Reinhard
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Was heißt denn bei dir "echte" DLL? Und was dann "unechte" DLLs? :) Mit boost bekommst du deine Anforderungen auf jeden Fall schnell hin, die Anzahl der Zeilen Code ist überschaubar. Auch die Komplexität ist nicht besonders hoch. Ob SWIG hier besser geeignet ist (ich habe es bei mir eher in die Ecke "Extensions" eingeordnet) kann ich nicht sagen, musst du wohl selber ausprobieren.

Falls du dir nicht die Abhängigkeiten der Frameworks einfangen willst, könntest du das ganze auch direkt in C machen und die bereits vorhandene Python-DLL verwenden und statisch linken. Hört sich jetzt aber nicht unbedingt nach mehr Spaß an ^^
Das Leben ist wie ein Tennisball.
rkager
User
Beiträge: 8
Registriert: Sonntag 17. Februar 2008, 19:03

Ich glaub ich muss da mit dem Kunden noch einmal ein Wörtchen reden.. viel Schnick Schnack was dann gar nicht gebraucht wird bzw. nur die Fehlersuche verschlimmert.. Vor allem weil Sie den .py Code sowieso haben wollen damit sie selbstständig Änderungen machen können, dann wieder ne .dll draus machen :roll:

Bin mittlerweile für c:\python25\python.exe c:\converter.py parm1 parm2 :lol:

Aber danke für den boost Tipp, schau es mir auf jeden Fall an, und versuch die echte .dll zu erstellen ;)

Reinhard
Antworten