VB6 und Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Mittwoch 18. März 2009, 22:30

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
DasIch
User
Beiträge: 2465
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Mittwoch 18. März 2009, 22:47

Das geht über die C API des Interpreters.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 18. März 2009, 23:32

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?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Donnerstag 19. März 2009, 06:52

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.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 19. März 2009, 11:30

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
:-)
Zuletzt geändert von gerold am Donnerstag 19. März 2009, 12:11, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Donnerstag 19. März 2009, 11:50

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. ;)
Antworten