Seite 1 von 1

VB6 und Python

Verfasst: Mittwoch 18. März 2009, 22:30
von Pekh
Hallo,

an vielen Stellen ist ja zu hören, daß Python als eingebettete Skriptsprache in größeren Programmen eingesetzt wird. Was mich jetzt interessieren würde ist, wie die Kommunikation zwischen einem solchen Programm und der in Python geschriebenen Erweiterung allgemein funktioniert.

Oder, anders gesagt: Welche Wege gibt es, von einer in VB6 geschriebenen Anwendung aus eine in Python geschriebene Bibliothek zu nutzen? VB.net und IronPython sind im Moment keine Option.

Schönen Dank schon mal

Verfasst: Mittwoch 18. März 2009, 22:47
von DasIch
Das geht über die C API des Interpreters.

Re: VB6 und Python

Verfasst: Mittwoch 18. März 2009, 23:32
von Leonidas
Pekh hat geschrieben:Oder, anders gesagt: Welche Wege gibt es, von einer in VB6 geschriebenen Anwendung aus eine in Python geschriebene Bibliothek zu nutzen? VB.net und IronPython sind im Moment keine Option.
Eventuell COM?

Re: VB6 und Python

Verfasst: Donnerstag 19. März 2009, 06:52
von Pekh
Leonidas hat geschrieben: Eventuell COM?
Ich habe auch schon überlegt, aber irgendwie klingt das häßlich. Ich habe von COM keine Ahnung, aber es würde wohl bedeuten, daß ich die Python-Bibliothek entsprechend modifizieren müßte. Interessanter wäre für mich, die Anpassungen auf der VB-Seite vorzunehmen (wobei ich dann hier tendenziell wohl im falschen Forum bin ;)). Ich muß mal schauen, vielleicht finde ich ja einen Weg, die oben angesprochene C-API von VB aus nutzbar zu machen. Im Moment fühle ich auch nur vor, da ich noch keine Zeit habe, mich ernsthaft in das Projekt einzuarbeiten.

Vielen Dank für eure Anregungen. Vielleicht kommt ja noch die eine oder andere dazu.

Verfasst: Donnerstag 19. März 2009, 11:30
von gerold
Hallo Pekh!

COM hat seine Vor- und Nachteile. Deshalb binde ich Python-Programme mit XMLRPC in VB6-Programme ein. Es gibt auch für VB6 einen XMLRPC-Client. Dieser gibt Kommandos an das Python-Programm weiter und wartet, bis das Python-Programm geantwortet hat. Dabei können auch Rückgabewerte vom Python-Programm empfangen werden.

Man muss mit einplanen, dass das Python-Programm (je nach Umfang) mehrere Sekunden braucht, bis es gestartet ist. Das ist auch einer der Gründe, weshalb ich Python-Programme in VB6 nicht mehr erst dann starte, wenn sie benötigt werden. Ich starte das Python-Programm ein paar Sekunden bevor es benötigt wird und lasse es auf Anfragen warten.

Dies hier http://paste.pocoo.org/show/108631/ ist ein kleiner Auszug aus einem Programm, welches mit einer VB6-Anwendung zusammenarbeitet. Das hier gezeigte Modul wartet auf die XMLRPC-Anfrage. Wird die Funktion ``get_additional_settings`` aufgerufen, dann wird die GUI (welche sich im Modul ``sammelrechnung_gui`` befindet) angezeigt. Gestoppt wird der XMLRPC-Server mit einem Aufruf der ``quit``-Funktion.

In VB habe ich für XMLRPC diese Komponente http://comxmlrpc.sourceforge.net/ verwendet.

Auf diese Weise habe ich in den letzten Jahren ein vorhandenes VB6-Programm mit kleinen Python-Programmen erweitert und niemand würde einen Unterschied zwischen VB6 und Python (wxPython) oder gar einen Geschwindigkeitsverlust entdecken.

mfg
Gerold
:-)

Verfasst: Donnerstag 19. März 2009, 11:50
von Pekh
Dann müßte also ähnlich wie bei COM auf der Python-Seite eine Art Server implementiert werden? Ich fand diese Vorstellung anfangs ziemlich abstoßend, weil ich dachte, ich müßte jetzt jede einzelne Bibliothek mit einem Server ausstatten. Inzwischen gefällt mir der Gedanke zunehmend, weil ich mir überlegt habe, daß ich den Server ja nur einmal (als das zu startende Programm) haben muß, wenn ich ihn mit einem Plugin-System versehe, das in der Lage ist, beliebige Module "nachzuladen". Ok, diese Vorstellung muß ich dann wohl revidieren, wenn ich mehr Ahnung von xmlrpc habe. :D

Vielen Dank Euch allen, jetzt habe ich doch zumindest mal einige gute Perspektiven / Ansätze beisammen. Zu wissen, daß ein Problem halbwegs elegant gelöst werden kann, hilft bei der Planung doch schon weiter. ;)