Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi .tlb, ActiveX-Bibliothek, "Schnittstelle nicht unterstützt" (https://www.delphipraxis.net/64280-tlb-activex-bibliothek-schnittstelle-nicht-unterstuetzt.html)

Meta777 1. Mär 2006 17:46


.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:

3.2. Building an eFilm Automation client in Visual C++
1. Use the AppWizard to create a new application (SDI, MDI, dialog). Ensure that Automation is checked.
2. Open ClassWizard.
3. Click Add Class and select From Type Library.
4. Select eFilm.tlb (included in this package).
5. Instantiate IEFilm and call CreateDispatch(“efilm.document”).
6. Call the member function you want.
Ich habe mit der tlb-Datei eine DLL erzeugt indem ich in Delphi 7 folgendes tat:
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

marabu 1. Mär 2006 18:16

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

Meta777 1. Mär 2006 20:34

Re: .tlb, ActiveX-Bibliothek, "Schnittstelle nicht unte
 
Zitat:

Zitat von marabu
Hallo.
Ich verstehe nicht so richtig warum du so vorgehst.

Weil ich leider kaum Ahnung hab von dem was ich da tue. :oops: :)
Zitat:

Zitat von marabu
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.

Bitte sag mir doch wie das geht. Leider konnte ich nicht allzuviel über die Handhabung dieser tlb Dateien finden.
Zitat:

Zitat von marabu
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?

Die DLL hab doch ich erzeugt, also sollte es doch kein problem sein? Oder ist die DLL die ich erzeugt habe generell sinnlos?
Eine EFILM.PAS habe ich nicht, oder meinst du die von Delphi erzeugte EFILM_TLB.PAS?

Danke für deine Hilfe

Gottes Segen

marabu 1. Mär 2006 20:48

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

Meta777 2. Mär 2006 11:03

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

mkinzler 2. Mär 2006 11:08

Re: .tlb, ActiveX-Bibliothek, "Schnittstelle nicht unte
 
Die erzeugt *_TLB.pas Datei ist nur ein wrapper für Delphi. In den Dateien
Zitat:

efDICOM.dll, efCommon.dll und DICOMDLL.dll
ist die Funktionalität verborgen. Ohne diese Dateien funktioniert dein Programm/deine Dll nicht.

Meta777 2. Mär 2006 11:58

Re: .tlb, ActiveX-Bibliothek, "Schnittstelle nicht unte
 
Zitat:

Zitat von mkinzler
Die erzeugt *_TLB.pas Datei ist nur ein wrapper für Delphi. In den Dateien
Zitat:

efDICOM.dll, efCommon.dll und DICOMDLL.dll
ist die Funktionalität verborgen. Ohne diese Dateien funktioniert dein Programm/deine Dll nicht.

Nur sind diese doch immer mitgeliefert. Also versteh ich nicht warum es nur auf den Rechnern geht wo ich die DLL aus der .tlb datei erzeugt habe :?: :wall: :roteyes: :firejump: :kotz:
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

mkinzler 2. Mär 2006 12:09

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)

Meta777 2. Mär 2006 12:40

Re: .tlb, ActiveX-Bibliothek, "Schnittstelle nicht unte
 
Zitat:

Zitat von mkinzler
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)

Die tlb wird vom SDK gestellt, die hab ich nicht selbst erstellt...
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:
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;
So langsam gehen mir die Rechner aus....

Luckie 2. Mär 2006 13:00

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 11:42 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz