Zugriff auf Visual Basic Objekte

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
thomas_m
User
Beiträge: 11
Registriert: Freitag 21. November 2003, 08:31

Hallo,
wie funktioniert der Zugriff von Python aus auf VB Objekte?
Man hat in VB zum Beispiel einen Button der eine Messagebox ausgibt. Name des Buttons z.B.: cmdTest
Wie kann ich jetzt von Python aus auf diesen einen Button zugreifen?
Probiere das Ganze schon länger, sitze aber irgendwie auf der Leitung.
Bin über jede Info dankbar.

Danke...
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo thomas_m!

Um auf VB-Objekte zugreifen zu können, musst du im Visual Basic eine DLL oder eine ActiveX-EXE erstellen. Auf die Funktionen, Eigenschaften (Properties) und Methoden von öffentlichen Klassen kannst du dann mit jeder Programmiersprache, die mit ActiveX-Objekten umgehen kann, zugreifen.

Damit du von Python aus auf ActiveX-Objekte zugreifen kannst, musst du die Win32 Extensions for Python installieren. Die findest du unter http://starship.python.net/crew/mhammon ... loads.html.

Nehmen wir mal an, du hast im Visual Basic folgenden Code in die Klasse MeineTestklasse geschrieben und die DLL (also dein VB-Programm) MeineVbDLL genannt:
(Hinweis: Nach dem kompillieren muss es eine Datei mit dem Namen MeineVbDLL.dll geben)

Code: Alles auswählen

Public Function HalloWelt(byval sVorname as string) as string
    HalloWelt = "Servus aus Tirol, " & sVorname & "."
End Function
dann kannst du in Python mit diesem Code auf die VB-Funktion zugreifen:

Code: Alles auswählen

import win32com.client as wc

objTestklasse = wc.Dispatch("MeineVbDLL.MeineTestklasse")
print objTestklasse.HalloWelt("Mein_Vorname")
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
thomas_m
User
Beiträge: 11
Registriert: Freitag 21. November 2003, 08:31

Servus gerold,
danke erstmal für deine Hilfe.
Habs gerade probiert, funktioniert ohne Probleme der Zugriff von Python aus.
Eine Frage habe ich aber trotzdem noch :lol:
Beim Importieren des Moduls schreibst du:
import win32com.client as wc
Was bedeutet das <<as wc>>? Habe in der Python WIN32 Doku nachgesehen, aber nichts gefunden.

Kennst du Bücher oder Tutorials, welche du empfehlen kannst?
Ich kenne bisher nur das von O'Reilly "Python WIN32 Programming", habs aber noch nicht.

Trotzdem vielen Dank für alles,
Gruß
Thomas
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

thomas_m hat geschrieben:Beim Importieren des Moduls schreibst du:
import win32com.client as wc
Hallo Thomas!

wc ist mit dieser Definition ein Alias, den ich nach dem Import statt win32com.client verwenden kann.

Aus

Code: Alles auswählen

win32com.client.Dispatch
wird

Code: Alles auswählen

wc.Dispatch
Eine detaillierte Erklärung findest du hier:
http://www.python.org/doc/current/ref/import.html


mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo!

Zum Thema ActiveX und Python habe ich noch einen interessanten Link gefunden :-)

http://www.python.org/windows/win32com/ ... pframe.htm

Besonders interessant ist, dass man mit Python COM-Clients sowie COM-Server programmieren kann. :mrgreen:

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
thomas_m
User
Beiträge: 11
Registriert: Freitag 21. November 2003, 08:31

Alles klar,
danke noch mal alles

Gruß
Thomas
Antworten