Mustafa Görmezer

 
  • Decrease font size
  • Default font size
  • Increase font size
Early- und Latebinding von COM Objekten mit Python PDF Drucken E-Mail
Benutzer Bewertung: / 2
SchlechtSehr Gut 
Python nutzt das Modul win32com der Windows-Erweiterung Pywin32 zur Automatisierung von Applikationen über COM (Component Object Model). Man spricht hier auch von COM-Automation. Dabei unterscheidet es zwischen early- sowie late-binding. Um nicht zu weit auszuholen, versuche ich es hier einmal kurz auf den Punkt zu bringen:

Late-binding: Python kennt keine Methoden und Attribute der Objektbibliothek, die per COM angesprochen und automatisiert werden soll.

Early-binding: Python kennt alle Methoden und Attribute der Objektbibliothek, die per COM angesprochen und automatisiert werden soll.

Was macht das für einen Unterschied ?

Nun, zunächst hat das early-binding Performance-Vorteile bei der Ausführung der Python-Programme. Aber dafür müssen einmalig vor Ausführen der Anwendungen sog. Cachefiles für die genutzten Bibliotheken erzeugt werden. Das kann je nach größe und Anzahl der Bibliothek recht lange dauern. Ein Trost ist, dass dieser Prozess nur ein einziges Mal durchgeführt werden muss. Danach sind bei jeder Ausführung der Python-Programme die Cachefiles noch vorhanden und werden genutzt.

Ein weiterer Vorteil des early-bindings betrifft das Editieren im Pythonwin-Editor. Da durch die Cachefiles alle Methoden und Attribute Python bekannt sind, sind sie auch Pythonwin bekannt. Das bedeutet, dass während des Editierens nach den ersten Buchstaben der Pythoncode vervollständigt wird. Das macht das Programmieren wesentlich komfortabler.

Man kann aber generell keine Empfehlung abgeben, ob man early- oder late-binding nutzen soll. Es existieren Anwendungen wie z.B. CATIA V5, die mit early-binding so ihre Probleme haben. In solchen Fällen muss das late-binding genutzt werden.

Wie werden die Cachefiles erzeugt und das early-binding genutzt ?

Mir sind drei Wege bekannt:

1. Einmaliger Aufruf des Programms c:\python23\Lib\site-packages\win32com\client\makepy.py und Auswahl der zu automatisierenden Objektbibliothek.

2. Einmaliger Aufruf des Programms c:\python23Libsite-packageswin32comclientmakepy.py mit Name der zu automatisierenden Objektbibliothek als Argument. Z.B. makepy.py "Microsoft Word 10.0 Object Library"

3. dynamisches generieren der Cachefiles. Dazu sind 2 Zeilen Code im Python-Programm nötig, die durch das Aufrufen von makepy.py mit dem Argument -i ausgegeben werden. Z.B:makepy.py -i "Microsoft Word 10.0 Object Library" liefert folgende Ausgabe:

>>> # Use these commands in Python code to auto generate .py support
>>> from win32com.client import gencache
>>> gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}', 0, 8, 2)

Bei der dynamischen Methode werden beim ersten Aufruf des Programms die Cachefiles einmalig erzeugt und bleiben erhalten und von Python- Programmen genutzt, bis sie manuell vom User gelöscht werden. Bei ersteren beiden werden Sie einmalig manuell erzeugt. Das bedeutet auch: falls die Cachefiles, warum auch immer, gelöscht werden, werden sie nur von der dynamischen Methode wieder neu erzeugt.

Wie nutzt man das late-binding ?

Wie eingangs erwähnt, haben es manche Anwendungen schwer mit early-binding. In solchen Fällen muss das late-binding genutzt werden. Man erzwingt es durch einen "dynamic Dispatch". Dazu ruft man im Python-Programm die COM-Bibliothek der Applikation (hier Outlook) wie folgt auf:

o = win32com.client.dynamic.Dispatch("Outlook.Application")

Ein o = win32com.client.Dispatch("Outlook.Application") dagegen nutzt (falls vorhanden) das Cachefile für Outlook. Falls es nicht vorhanden ist, erfolgt ebenfalls ein late-binding.

Mehr und Ausführlicheres zu Python und COM ist auf einem Probekapitel des Buchs Python Programming on Win32 zu finden.


Relevante Beiträge (automatisch):

 
< Voriger Artikel   Nächster Artikel >

Sag nein!

.ausgestrahlt

Statistik

Besucher: 11044171
Aktuell 18 Gäste online

Feedback

Wenn dir die Seite nützlich war, gib ihr doch ein +1:

Kurz-Tipps:

Kein 3D-PDF mehr aus CAD-Daten in Acrobat X
Nach dem Verkauf des 3D-PDF-SDK wird es einem Adobe Blog-Posting zufolge im neuen Acrobat X keine Import-Schnittstellen mehr für 3D CAD-Daten mehr geben. Es wird dann nur noch möglich sein, PRC und U3D zu importieren und in ein 3D-PDF zu wandeln. Software zur Konvertierung von 3D CAD-Daten in 3D-PDF wird in Zukunft von Tech Soft 3D oder Tetra4D LLC angeboten.
 

Kommentare

  • Hallo, PyScripter gefällt mir auch wirklich sehr gut. Etwas nervig ist aber, dass bei jedem Aufruf von input() ein Dialogfenster für die Eingabe aufge... weiter...
  • Hallo Zusammen, vielen Dank für die hilfreiche Unterstützung beim Erstellen des ersten eigenen 3d-PDF. Für eine Technikerarbeit soll ich ein Bauteil i... weiter...
  • Suche nach einem Mindmapping-Tool für mein Projekt und ich fand joomla über Ihre Website, danke! Grüße aus Barcelona weiter...
RSS

Weiteres