![]() |
Zusammenhang: ActiveX, Type Library und COM
Hallo,
ich bräuchte mal eine kurze Aufklärung, wie die im Titel genannten Technologien zusammenhängen bzw. was sie überhaupt sind und wie sie funktionieren. Eine kurze Erklärung zu den Begriffen würde mir zum Einstieg und Verständnis schon mal sehr helfen. Weiterführende Links wären dann auch nicht schlecht. Hintergrund ist der, dass ich hier ein Skining Engine habe, der seine Funktionalität über eine ActiveX-DLL / -Kontrol zur Verfügung stellt. In der Hilfe dazu steht, dass man dazu die Type Library importieren muss, um die Funktionalität nutzen zu können. jetzt wollte ich mal wissen, wie das zusammenhängt und genau funktioniert. Danke schon mal für eure Mühe im Voraus. |
Re: Zusammenhang: ActiveX, Type Library und COM
Also ich will mal zusammenfassen, was ich jetzt herausbekommen habe: ActiveX ist wohl eine Erweiterung von COM. Und eine Type Library veröffentlicht das Interface des COM-Objectes. OK, so weit, so gut.
Aber eins hab eich nicht verstanden: Ein Interface ist eine abstrakte Klasse mit virtuellen Methoden. Ja aber wo wird dann die eigentliche Funktionalität implementiert? Zum Beispiel bei diesem Skining Engine, den ich ansprach. |
Re: Zusammenhang: ActiveX, Type Library und COM
Ich denke mal in der .OCX Datei, welche ja die ActiveX Library darstellt. Das Interface dient dort sozusagen wie der Name schon sagt als Schnittstelle.
[Vermutungen] |
Re: Zusammenhang: ActiveX, Type Library und COM
Das vermute ich auch mal. Eine *.ocx ist doch eigentlich nur ne spezielle DLL.
|
Re: Zusammenhang: ActiveX, Type Library und COM
Hat da jemand mal etwas Beispielcode zur Hand, damit ich mir das mal angucken kann?
Dieser Skinning Engine liefert keine *.ocx aus sondern nur eine DLL-Datei. |
Re: Zusammenhang: ActiveX, Type Library und COM
Da kann ich leider nicht helfen. Habe mich noch nie mit der Thematik befasst.
Wir hatten mal einen Studenten, der nebenher gelegentlich für unsere Firma geproggt hat, und der hat selbst *.ocx geschrieben, sogar mit Delphi. Hab mich damals noch geärgert, dass ich die Lic-Datei von ihm überall einbinden musste, weil er den Source für das OCX nicht rausgerückt hat ;) |
Re: Zusammenhang: ActiveX, Type Library und COM
Die eigentliche Funktionalität liegt in einer DLL oder einer OCX-Datei. Die Typelibrary stellt die Schnittstelle dar.
Du kannst Dir, wenn Du Typbibliotheken importierst, entsprechende Wrapper aus der DLL bzw. der OCX-Datei generieren lassen, die die Schnittstelle bilden. Darin siehst Du jetzt die entsprechenden Interfaces. Im Header steht zusätzlich, aus welcher Typbibliothek der Wrapper erzeugt wurde. Importiere Dir doch einfach mal eine Typbibliothek, dann siehst Du es. Beispiel: Zitat:
Zitat:
|
Re: Zusammenhang: ActiveX, Type Library und COM
Gut soweit hab eich das auch verstanden. Nur wenn ich lesen
Zitat:
Machen wir es doch mal ganz einfach: Ich will einen COM-Server, der mir zwei Zahlen addiert. Wie sähe dass dann aus? |
Re: Zusammenhang: ActiveX, Type Library und COM
Zitat:
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 :D |
Re: Zusammenhang: ActiveX, Type Library und COM
danke, das warne doch schon mal ein paar mehr Informationen. Kennt jemand ein entsprechendes Tutorial für Delphi?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz