Einzelnen Beitrag anzeigen

Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#9

Re: Zusammenhang: ActiveX, Type Library und COM

  Alt 15. Okt 2007, 18:19
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
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat