![]() |
Ist COM-DLL im System eingebunden (registriert)?
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; |
Re: Ist COM-DLL im System eingebunden (registriert)?
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 ... |
Re: Ist COM-DLL im System eingebunden (registriert)?
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 |
Re: Ist COM-DLL im System eingebunden (registriert)?
Zitat:
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: ![]() die ProgID wäre also "TypeLib1.cyc" |
Re: Ist COM-DLL im System eingebunden (registriert)?
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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