AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Ist COM-DLL im System eingebunden (registriert)?
Thema durchsuchen
Ansicht
Themen-Optionen

Ist COM-DLL im System eingebunden (registriert)?

Offene Frage von "blackdrake"
Ein Thema von blackdrake · begonnen am 29. Jan 2007 · letzter Beitrag vom 29. Jan 2007
Antwort Antwort
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#1

Ist COM-DLL im System eingebunden (registriert)?

  Alt 29. Jan 2007, 17:58
Hallo.

Ich habe eine DLL, die einen Kontextmenüeintrag setzt, über eine Delphi-Funktion (die RegSvr32 ersetzt) aus der CodeLib erfolgreich eingebunden und möchte nun aber auch abfragen, ob die DLL registriert bzw gestartet ist. Wie kann ich das in Delphi tun?

Gruß
blackdrake

Delphi-Quellcode:
uses
  ActiveX;

begin
  CoInitialize (nil);

  try
    RegisterServer(extractfilepath(application.exename)+'MeineDLL.dll');
  finally
    CoUninitialize;
  end;
end;
Daniel Marschall
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Ist COM-DLL im System eingebunden (registriert)?

  Alt 29. Jan 2007, 18:10
Am Einfachsten prüfst du, ob eine CoClass registriert ist:
Delphi-Quellcode:
function ProgIDExists(const ProgID:WideString):Boolean;
var
   tmp : TGUID;
begin
   Result := Succeeded(CLSIDFromProgID(PWideChar(ProgID), tmp));
end;

if ProgIDExists('MeineDLL.Plugin') then ...
Andreas
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Ist COM-DLL im System eingebunden (registriert)?

  Alt 29. Jan 2007, 18:26
Hallo.

Danke für die Antwort. Leider funktioniert es nicht. Ich habe es schon mit "MeineDLL.dll" und "MeineDLL.dll.Plugin" probiert. Eine DLL namens MeineDLL.dll ist mit RegSvr32.exe registriert worden und der Kontextmenüeintrag existiert.

Es handelt sich um eine DLL, die eine GUID hat und über TComObject einen Kontextmenüeintrag erstellt (aus einer Codevorlage erstellt).

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Ist COM-DLL im System eingebunden (registriert)?

  Alt 29. Jan 2007, 18:43
Zitat von blackdrake:
Leider funktioniert es nicht. Ich habe es schon mit "MeineDLL.dll" und "MeineDLL.dll.Plugin" probiert. Eine DLL namens MeineDLL.dll ist mit RegSvr32.exe registriert worden und der Kontextmenüeintrag existiert.
Es kommt hier auf jedes Zeichen an; raten bringt da nichts.
Der als ProgID zu übergebene String besteht aus 2 Teilen: "Libraryname.CoClassname"
Lass dir mal die TLB in Delphi anzeigen.
Der Text ganz oben an der Wurzel (Symbol 3 kleine blaue Rauten) ist der "Libraryname".
Es gibt nun mindestens eine CoClass.
Man erkennt sie an dem Symbol "rote Kugel springt aus blauem Karton".

Beispiel:
http://info.borland.com/techpubs/del...s/typlibed.gif
die ProgID wäre also "TypeLib1.cyc"
Andreas
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Ist COM-DLL im System eingebunden (registriert)?

  Alt 29. Jan 2007, 18:49
Hallo. Ich hab leider keine Ahnung von was du redest Ich habe bei meiner Kontextmenü-DLL keine TLB.

Meine DLL besteht nur aus einer PAS und sieht so aus:

Delphi-Quellcode:
unit ShellExtMain;

interface

uses
  ComServ, SysUtils, ShellAPI, Windows, Registry, ActiveX, ComObj, ShlObj,
  Graphics, classes, inifiles;

const
  GUID_TDFKontextMenuShellExt: TGUID = '{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}';

type
  TDFKontextMenuShellExt = class(TComObject, IShellExtInit, IContextMenu)
    protected
      function IShellExtInit.Initialize = SEInitialize;
      function SEInitialize(pidlFolder: PItemIDList; lpdobj: IDataObject; hKeyProgID: HKEY): HResult; stdcall;
      function QueryContextMenu(Menu: HMENU; indexMenu, idCmdFirst, idCmdLast, uflags: UINT): HResult; stdcall;
      function InvokeCommand(var lpici: TCMInvokeCommandInfo): HResult; stdcall;
      function GetCommandString(idCmd, uType: UINT; pwReserved: PUINT; pszName: LPSTR; cchMax: UINT): HResult; stdcall;
  end;

(...)

initialization
  // Initialisierung
  TDFKontextMenuShellExtFactory.Create(ComServer, TDFKontextMenuShellExt, GUID_TDFKontextMenuShellExt,
    '', 'Programmname', ciMultiInstance, tmApartment);
  (...)
end.
Daniel Marschall
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:24 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