Zitat:
Eine Typebibliothek ist eine Binärdatei, die in einem MS spezifischen Format
COM-Klassen und -Schnittstellen beschreibt
(Peter Loos GoTo
COM Addion-Wesley 2001 Seite 247)
Das Buch ist für den Einstieg meiner Meinung nach ziemlich gut, wenn auch für C++. Ich habs auch nur für ein paar Euros bekommen. Das einzige
COM Buch für Delphi gibts von Andreas Kosch.
Ich habe mich jetzt auch nicht so für
COM unter Delphi eingearbeitet, daher kann ich nicht 100% Auskunft geben.
Man muss für
COM Routinen, die OutofProcess laufen - also einen eigenen Prozess besitzen - eine Schnittstellensprache verwenden, die IDL (Interface Definition Language). Sie wird in dem MS Format TLB gespeichert. In Delphi erstellt man dazu eine "Typbibliothek" und fügt dort neue Schnittstellen ein. Diese wird in der IDL Sprache gespeichert.
Das muss so gemacht werden, weil jeder andere Sprache diesen
COM-Server ansteuern könnte - also nicht nur Delphi. Zudem müssene Parameter und Rückgabewert von einem Prozess in den
COM-Prozess serialisiert (to marshall) werden. Es ist daher nicht möglich, beliebige Datentypen als Parameter zu verwenden.
COM spezifiziert dazu seine eigenen Datentypen (BSTR) und andere müssen durch eine eigene Marshall-Implementation abgedeckt werden.
Wenn man eine Typbibliothek erstellt hat, erstellt man darin ein
COM-Objekt und implementiert es auch gleich. Also zuerst die abstrakten Methoden einfügen, dann das Interface ableitung und die Methoden implementieren. Mit Delphi und einem neuen
COM-Objekt wird das schnell gemacht (wenn man die umständliche Erstellung der Interfacemethoden im TLB-Editor ignoriert).
Delphi erstellt nicht nur ein
COM-Interface sondern auch gleich eine Implementation und auch eine Registration für das ComObjekt.
Die
DLL wird mit regsvr32 <
dll> registriert und mit regsvr32 /u <
dll> entfernt. Die Exe kann man mit Parameter steuern.
In dem TLB Editor kann man dasselbe übrigens per Button machen. Im Quelltext macht das CoRegisterClassObject und CoRevokeClassObject. Habs aber nie verwendet.
Wichtig bei der ganzen Sache ist eben die Registrierung in der Registry.
Man kann mit der Hilfe der TLB Datei oder der IDL Interfacedeklarationen für beliebige Sprachen generieren.
Wir können dann mit CoCreateInstance das registrierte
COM-Interface anfordern und verwenden. Das geht übrigens auch über ein Netzwerk.
So ich hoffe mal ich hab nicht völligen Blödsinn geredet