AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi .tlb, ActiveX-Bibliothek, "Schnittstelle nicht unterstützt"
Thema durchsuchen
Ansicht
Themen-Optionen

.tlb, ActiveX-Bibliothek, "Schnittstelle nicht unterstützt"

Ein Thema von Meta777 · begonnen am 1. Mär 2006 · letzter Beitrag vom 8. Mär 2006
Antwort Antwort
Seite 1 von 2  1 2      
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

.tlb, ActiveX-Bibliothek, "Schnittstelle nicht unterstü

  Alt 1. Mär 2006, 18:46
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

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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

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

  Alt 1. Mär 2006, 19:16
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
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

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

  Alt 1. Mär 2006, 21:34
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.
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 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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

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

  Alt 1. Mär 2006, 21:48
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
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

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

  Alt 2. Mär 2006, 12:03
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?!
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
Angehängte Dateien
Dateityp: rar efilmautoclient_289.rar (152,2 KB, 11x aufgerufen)
Dateityp: pas efilm_tlb_653.pas (17,7 KB, 19x aufgerufen)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

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

  Alt 2. Mär 2006, 12:08
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

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

  Alt 2. Mär 2006, 12:58
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
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#8

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

  Alt 2. Mär 2006, 13:09
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)
Markus Kinzler
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

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

  Alt 2. Mär 2006, 13:40
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?!
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....
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

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

  Alt 2. Mär 2006, 14:00
Kopier die DLLs auf den Zielrechner ins Systemverzeichnis und registrier sie mit regsrv32 meine.dll.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 Uhr.
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