![]() |
.tlb, ActiveX-Bibliothek, "Schnittstelle nicht unterstü
Hallo DPler,
Mit einer, aus einer tlb-Datei erstellten, DLL bekomme ich immer den Fehler "Schnittstelle nicht unterstützt", wenn ich das Prog auf einen Rechner ausführe wo ich die DLL NICHT erstellt habe!?! WIESO :?: :wall: :?: In der Dokumentation stand folgendes zum benutzen der tlb-Datei: Zitat:
1. Datei -> Neu -> Weitere -> ActiveX -> ActiveX-Bibliothek (Ist das überhaupt richtig?) 2. Projekt -> Typenbibliothek importieren -> Hinzufügen -> <.tlb-Datei ausgewählt> -> Unit anlegen (EFilm_TLB.pas erstellt) 3. Projekt -> compilieren Und fertig ist die DLL... Jetzt habe ich ein neues Projekt erstellt um das Ganze zu testen. Dazu habe ich TDocument aus EFilm_TLB.pas benutzt
Delphi-Quellcode:
procedure Test;
var blah: TDocument; begin RegisterOCX('C:\EFilm.dll');//aus der DP blah := TDocument.Create(nil); try blah.Connect;//HIER KOMMT "SCHNITTSTELLE NICHT UNTERSTÜTZT" WENN DAS PROG AUF EINEN RECHNER AUSGEFÜHRT WIRD WO DIE DLL NICHT ERSTELLT WURDE! blah.oleShowMainWindow(SW_MAXIMIZE); //usw... finally blah.Free; end; end; Ich hoffe ihr könnt mir helfen. Gottes Segen |
Re: .tlb, ActiveX-Bibliothek, "Schnittstelle nicht unte
Hallo.
Ich verstehe nicht so richtig warum du so vorgehst. Wenn du eine TLB-Datei zur Verfügung hast, dann kannst du diese in Delphi importieren. Die enthaltenenen Objekte und Schnittstellen werden durch eine bestimmte DLL implementiert - wenn du den Import mit TLIBIMP vorbereitest, dann wird dir die notwendige DLL im Header angegeben. Für die Programmierung brauchst du die Unit EFILM.PAS und zur Laufzeit die zugehörige Support-DLL. Wenn du diese DLL nicht weitergeben darfst, dann hast du ein Lizenz-Problem. Welche Bedeutung soll die von dir erstellte DLL haben? Grüße vom marabu |
Re: .tlb, ActiveX-Bibliothek, "Schnittstelle nicht unte
Zitat:
Zitat:
Zitat:
Eine EFILM.PAS habe ich nicht, oder meinst du die von Delphi erzeugte EFILM_TLB.PAS? Danke für deine Hilfe Gottes Segen |
Re: .tlb, ActiveX-Bibliothek, "Schnittstelle nicht unte
Zur Erstellung deines Programms wird nur die support dll gebraucht, und das nur zur Laufzeit. Entwickeln kannst du deinen Code mit der Unit EFILM.PAS oder EFILM_TLB.PAS - wie es dir gefällt. Dein Programm wird dann nur funktionieren, wenn die support dll auf der Zielmaschine vorhanden ist. Diese heißt vermutlich EFILM.DLL und existiert bereits. Wenn nicht, dann musst du mal den Header von EFILM.PAS zeigen.
Da du die Datei EFILM.PAS schon erzeugt hast, brauchst du TLIBIMP nicht mehr. Alternativ zur IDE kannst du nämlich mit "TLIBIMP -Fe- EFILM.TLB" auf der Kommandozeilen-Ebene die Unit für Delphi erstellen. marabu |
Re: .tlb, ActiveX-Bibliothek, "Schnittstelle nicht unte
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo marabu,
ich hab mal die durch "Typenbibliothek importieren"-erzeugte efilm_tlb.pas angehängt. Diese EFilm_tlb.pas hab ich ja dann auch genutzt nur war mir unklar warum es auf den einen Rechner lief und auf den anderen Rechner nicht?! :gruebel: Meinst du mit support DLL die DLL die ich erzeugt habe? Sonst sind noch efDICOM.dll, efCommon.dll und DICOMDLL.dll im Programmpfad von EFilm vorhanden. Ich hab auch das Beispiel Projekt hinzugefügt, vielleicht ist es behilflich. Mir war es das nicht, da meine C++ Kenntnisse quasi nicht vorhanden sind... Gottes Segen |
Re: .tlb, ActiveX-Bibliothek, "Schnittstelle nicht unte
Die erzeugt *_TLB.pas Datei ist nur ein wrapper für Delphi. In den Dateien
Zitat:
|
Re: .tlb, ActiveX-Bibliothek, "Schnittstelle nicht unte
Zitat:
Muss ich den irgendwas Registrieren bevor ich die meine funktionen benutzen kann? Nur hab ich das ja auch nicht auf den Rechnern gemacht wo ich die DLL erstellt hab?! TIA be blessed |
Re: .tlb, ActiveX-Bibliothek, "Schnittstelle nicht unte
Es kommt darauf an ob du die TLB aus der DLL oder oder vom installierten ActiveX gemacht hast. Beim 2. Fall muß die dll beim OS registriert werden (regsvr32)
|
Re: .tlb, ActiveX-Bibliothek, "Schnittstelle nicht unte
Zitat:
Ich bin eben einmal so vorgegangen wie marabu es gesagt hat. Also ich hab nur ein Projekt erstellt und die tlb importiert. Sprich ohne eine DLL zu erzeugen. Dies hat funktioniert! ABER: wieder nur auf den Rechner wo ich das Project erstellt habe?! :wall: :wall: :wall: Ich hab auch versucht mittels folgender Procedure die 3 DLLs von efilm zu registrieren aber keine hatte die "DllRegisterServer"-Procedure
Delphi-Quellcode:
So langsam gehen mir die Rechner aus....
procedure RegOCX(AFile: String);
var hLib: Cardinal; proc: function: HRESULT; begin hLib := LoadLibrary(PChar(AFile)); if hLib = INVALID_HANDLE_VALUE then RaiseLastOSError; try proc := GetProcAddress(hLib, 'DllRegisterServer'); if @proc <> nil then OleCheck(proc); finally FreeLibrary(hLib); end; end; |
Re: .tlb, ActiveX-Bibliothek, "Schnittstelle nicht unte
Kopier die DLLs auf den Zielrechner ins Systemverzeichnis und registrier sie mit regsrv32 meine.dll.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:18 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