![]() |
COM Klassen in dll
Hallo zusammen..
Ich probiere gerade eine Schnittstelle zu schreiben, die auf COM-Objekten basiert. Dank den Wizards in Delphi ist das auch kein Problem. Sie soll als Test etwa so aussehen:
Delphi-Quellcode:
Aus diesem Projekt kriege ich jetzt zwei Dateien: COMTest.dll und COMTest.tlb. Zum Problem:
Unit COMTest_TLB
IMyCOMObject = interface; MyCOMObject = IMyCOMObject; IMyCOMObject = interface(IUnknown) ['{2A7898B9-637F-4059-8D76-0FA1F87B8732}'] function JustATest(i1: Integer; i2: Integer): Integer; end; CoMyCOMObject = class class function Create: IMyCOMObject; class function CreateRemote(const MachineName: string): IMyCOMObject; end; . . Unit COMTest TMyCOMObject = class(TTypedComObject, IMyCOMObject) public function JustATest(i1: Integer; i2: Integer): Integer; end; . . Wie kann ich diese DLL jetzt in einem anderen Projekt verwenden bzw. wie kann ich in einem anderen Projekt eine Klasse des Typs TMyCOMObject instanzieren. Benötige ich in Delphi auch die .tlb Datei oder ist die nur für c++? Was ist genau mit dieser GUID, muss ich die zwingend registrieren? Naja, leider finde ansonsten nur sehr wenig Infos zu diesem Thema aber ich hoffe, dass mir jemand von euch weiterhelfen kann!? Grüsse und vielen Dank.. Dominic |
Re: COM Klassen in dll
Die .tlb Datei brauchst Du nur für das Delphi-Projekt bzw. wenn Du das ganze auf DCOM erweitern willst. Die .dll Datei musst Du mit dem MS Tool regsvr32.exe (immer im System32 Ordner) installieren und dann kannst Du das COM-Objekt auch schon einsetzen.
...:cat:... |
Re: COM Klassen in dll
Vielen Dank sakura, das mit dem regsvr32.exe hat mir schon weitergeholfen!
du hast geschrieben, dass ich das COM-Objekt dann einsetzen kann! Naja, ist vielleicht eine blöde frage aber.. Wie kann ich dieses COM-Objekt einsetzen? Muss ich die DLL Laden oder kann ich irgendwie über di GUID auf das Interface zugreifen? |
Re: COM Klassen in dll
Starte ein zweites Projekt - zB eine normale VCL Anwendung, binde die entsprechende _TLB.PAS in die uses Klausel ein und versuche folgendes:
Delphi-Quellcode:
...:cat:...
uses
..., COMTest_TLB; procedure Button1Click(Sender: TObject); var MyCOMObject: IMyCOMObject; begin MyCOMObject := CoMyCOMObject.Create; ShowMessage(IntToStr(MyCOMObject.JustATest(1, 2))); end; |
Re: COM Klassen in dll
das hat wunderbar geklappt :-) Danke schön!
Ist es richtig, dass man nicht darum herum kommt die Interfaces der COM-Klassen in dieser *_TLB-Unit nachzubilden, wenn die DLL z.B. in c++ geschrieben wurde und diese *_TLB-Unit noch nicht existiert? und ich somit die GUID der Interfaces, wie sie in der DLL verwendet werden, wissen muss? |
Re: COM Klassen in dll
Zitat:
Optional kannst Du ihn auch gleich eine Komponente in die Palette installieren lassen, persönlich rate ich davon ab, das ist aber reine Geschmackssache ;-) ...:cat:... |
Re: COM Klassen in dll
Nachtrag: Den Import von COM-Bibliotheken hat Chakotay anhand der MS XML Komponente in seinem Tutorial ausführlich dargelegt:
![]() ...:cat:... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 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