Delphi-PRAXiS
Seite 2 von 2     12   

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 2. Mär 2006 15:42

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

Zitat von Luckie
Kopier die DLLs auf den Zielrechner ins Systemverzeichnis und registrier sie mit regsrv32 meine.dll.

Auch das hilft nicht. :cry: "DLL wurde geladen aber Prozedureeinstiegspunkt für DLLRegisterServer wurde nicht gefunden" oderso. Nach wie vor kommt "Schnittstelle nicht unterstützt"....

Der einzige Unterschied zwischen den Rechnern wo es funktioniert und wo nicht, ist dass die tlb-Datei mit Delphi importiert worden ist. Was macht Delphi also noch wenn man eine tlb-Datei importiert :?:

Meta777 8. Mär 2006 09:10

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

Zitat von Meta777
Der einzige Unterschied zwischen den Rechnern wo es funktioniert und wo nicht, ist dass die tlb-Datei mit Delphi importiert worden ist. Was macht Delphi also noch wenn man eine tlb-Datei importiert :?:

:PUSH:

it's urgent :stupid:

be blessed

marabu 8. Mär 2006 09:19

Re: .tlb, ActiveX-Bibliothek, "Schnittstelle nicht unte
 
Es wird ein Installationsproblem sein. Wurde eFilm bzw. DICOM denn auf beiden Maschinen ordentlich per Setup installiert? Sind denn alle Schnittstellen aus EFILM_TLB.PAS auch in der Registrierdatenbank (HKCR) zu finden?

Grüße vom marabu

Meta777 8. Mär 2006 11:33

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

Zitat von marabu
Es wird ein Installationsproblem sein. Wurde eFilm bzw. DICOM denn auf beiden Maschinen ordentlich per Setup installiert?

EFilm wurde auf allen Rechner ordentlich installiert. die dlls efDICOM.dll DICOMDLL.dll und efcommon.dll werden von EFilm mit installiert.

Zitat:

Zitat von marabu
Sind denn alle Schnittstellen aus EFILM_TLB.PAS auch in der Registrierdatenbank (HKCR) zu finden?

Nein,

ich hab gerade mal nachgeschaut mit folgendem Ergebnis:

Wo es funktioniert (EFilm.tlb über Projekt|Typenbibliothek importieren importiert)
Code:
LIBID_EFilm: TGUID = '{C8CF03E5-FD1F-11D3-8C03-0080C8D3C5D3}';
  HKEY_CLASSES_ROOT\Interface\{C8CF03E6-FD1F-11D3-8C03-0080C8D3C5D3}\TypeLib -> (Standard)
  HKEY_CLASSES_ROOT\TypeLib\{C8CF03E5-FD1F-11D3-8C03-0080C8D3C5D3}
  HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{C8CF03E6-FD1F-11D3-8C03-0080C8D3C5D3}\TypeLib -> (Standard)
  HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{C8CF03E5-FD1F-11D3-8C03-0080C8D3C5D3}

DIID_IEFilm: TGUID = '{C8CF03E6-FD1F-11D3-8C03-0080C8D3C5D3}';
  HKEY_CLASSES_ROOT\Interface\{C8CF03E6-FD1F-11D3-8C03-0080C8D3C5D3}
  HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{C8CF03E6-FD1F-11D3-8C03-0080C8D3C5D3}

CLASS_Document: TGUID = '{C8CF03E4-FD1F-11D3-8C03-0080C8D3C5D3}';
  HKEY_CLASSES_ROOT\CLSID\{C8CF03E4-FD1F-11D3-8C03-0080C8D3C5D3}
  HKEY_CLASSES_ROOT\EFilm.Document\CLSID -> (Standard)
  HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{C8CF03E4-FD1F-11D3-8C03-0080C8D3C5D3}
  HKEY_LOCAL_MACHINE\SOFTWARE\Classes\EFilm.Document\CLSID -> (Standard)

WO ES NICHT FUNKTIONIERT! (tlb nicht importiert - TestApp bringt "Schnittstelle nicht unterstützt")
Code:
LIBID_EFilm: TGUID = '{C8CF03E5-FD1F-11D3-8C03-0080C8D3C5D3}';
  -NICHTS GEFUNDEN-

DIID_IEFilm: TGUID = '{C8CF03E6-FD1F-11D3-8C03-0080C8D3C5D3}';
  -NICHTS GEFUNDEN-

CLASS_Document: TGUID = '{C8CF03E4-FD1F-11D3-8C03-0080C8D3C5D3}';
  HKEY_CLASSES_ROOT\CLSID\{C8CF03E4-FD1F-11D3-8C03-0080C8D3C5D3}
  HKEY_CLASSES_ROOT\EFilm.Document\CLSID -> (Standard)
  HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{C8CF03E4-FD1F-11D3-8C03-0080C8D3C5D3}
  HKEY_LOCAL_MACHINE\SOFTWARE\Classes\EFilm.Document\CLSID -> (Standard)
Also muss doch Delphi die tlb registrieren?!!?
Wie kann ich das zur Laufzeit registrieren??
RegisterComServer(const DLLName: String); Ist es sicher nicht, denn ich hab keine DLL.
RegisterAsService(const ClassID, ServiceName: string); Ist es auch nicht, oder? ich hab ja kein Schlüssel "AppId" gefunden.
Welche ist es dann? :roteyes: :nerd: :smile2: :spin: :freak: :stupid: :cry:


TIA

Gottes Segen

Meta777 8. Mär 2006 13:16

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

Folgende Prozedure löst mein Problem:
Delphi-Quellcode:
procedure RegisterTLB(FileName: String);
var
  WFileName, DocName: WideString;
  TypeLib: ITypeLib;
  LibAttr: PTLibAttr;
  DirBuffer: array[0..MAX_PATH] of char;
begin
  if ExtractFilePath(FileName) = '' then
  begin
    GetCurrentDirectory(SizeOf(DirBuffer), DirBuffer);
    FileName := '\' + FileName;
    FileName := DirBuffer + FileName;
  end;
  if not FileExists(FileName) then
    raise Exception.CreateFmt('Datei "%s" nicht gefunden. Registrierung fehlgeschlagen!', [FileName]);
  WFileName := FileName;
  OleCheck(LoadTypeLib(PWideChar(WFileName), TypeLib));
  OleCheck(TypeLib.GetLibAttr(LibAttr));
  try
    OleCheck(TypeLib.GetDocumentation(-1, nil, nil, nil, @DocName));
    DocName := ExtractFilePath(DocName);
    OleCheck(RegisterTypeLib(TypeLib, PWideChar(WFileName), PWideChar(DocName)));
  finally
    TypeLib.ReleaseTLibAttr(LibAttr);
  end;
end;
Damit kann ich zur Laufzeit die tlb registrieren. D.h. allerdings das ich die tlb mitliefern muss und bei der Installation registrieren muss. Danach kann ich die tlb aber wie löschen. :roll:

Nungut, Danke für eure Hilfe


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:30 Uhr.
Seite 2 von 2     12   

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