Frage zur klientseitigen COM Programmierung

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
Axel
User
Beiträge: 3
Registriert: Samstag 13. August 2011, 13:31

Hallo zusammen,

ich moechte mit Python auf die COM Schnittstelle eines Programmes zugreifen. Ich erzeuge ein Objekt mit:
RTobj = win32com.client.Dispatch("TaiPanRealtime.Application")
und kann dann auch erfolgreich Methoden aufrufen, die fuer dieses Objekt dokumentiert sind.

Mein Problem beginnt, nachdem ich in der Dokumentation gelesen habe, ich soll ein Interface benutzen, welches nicht von RTobj aus erreichbar ist. Der mitgelieferte C# Beispielcode sieht so aus:

TaiPanRealtime tpr = new TaiPanRealtime();
IStamminformationen StammInfo = new StamminformationenClass();
StammInfo.SymbolNr = 78298;

Es wird direkt ein Objekt vom Typ StamminformationenClass erzeugt, ohne das Objekt TaiPanRealtime zu benutzen !?

Wie wuerde eine entsprechende Implementierung in Python aussehen ??

Axel
BlackJack

@Axel: Geht die C#-Implementierung denn über COM? Wo kommt denn die `StamminformationenClass` her? Kommt die aus einer mitgelieferten Bibliothek?
Axel
User
Beiträge: 3
Registriert: Samstag 13. August 2011, 13:31

BlackJack hat geschrieben:@Axel: Geht die C#-Implementierung denn über COM? Wo kommt denn die `StamminformationenClass` her? Kommt die aus einer mitgelieferten Bibliothek?
Ok, hier etwas detailliertere Infos.
TaiPan kommt mit Beispielen in C#, die im Visual Studio .Net 2003 geschrieben wurden.
Dem Projekt wurde ein Verweis zur Tai-Pan Realtime Library 1.0 hinzugefuegt. D.h. im Kontextmenu des Solutionexplorers wurde mit Add Reference ein Verweis auf die COM Library hinzugefuegt. In C# wird die dann mit "using TaiPanRTLib;" eingebunden.

Deswegen kann ich auch verstehen das C# mit
IStamminformationen StammInfo = new StamminformationenClass();
ein neues StamminformationenClass Objekt anlegen kann.

Bei Python ist mein einziger Zugang zur COM Library aber das Objekt welches ich von
win32com.client.Dispatch("TaiPanRealtime.Application") zurueckbekomme, oder ?!
Dies entspricht im C# Beispiel der Zeile "TaiPanRealtime tpr = new TaiPanRealtime();".

Die Frage ist, wie kann ich in Python ein StamminformationenClass Objekt anlegen ?

Axel
deets

Das hier hilft vielleicht:

http://www.codeproject.com/KB/COM/pytho ... terop.aspx

Denn dein IDispatch-basierender Ansatz wird denke ich nicht funktionieren.
Axel
User
Beiträge: 3
Registriert: Samstag 13. August 2011, 13:31

Oh ja, das sieht gut aus. Werde ich mir mal anschauen.
COM Zugriff von Python aus scheint doch komplexer zu sein, als ich dachte :-)

Danke,
Axel
Antworten