DLL- en ActiveX-besturingselementen registreren vanuit een Delphi-toepassing

Een populaire functie van Delphi is de projectimplementatie van een toepassing met een uitvoerbaar bestand (exe). Als de DLL- of ActiveX-besturingselementen in uw project niet zijn geregistreerd op de computers van de gebruikers, wordt een "EOleSysError" weergegeven als reactie op het uitvoeren van het exe-bestand. Om dit te voorkomen, gebruikt u het opdrachtregelprogramma regsvr32.exe.

RegSvr32.exe-opdracht

Handmatig gebruik van regsvr32.exe (Windows.Start - Run) registreert en registreert zelfregistreerbare DLL- en ActiveX-besturingselementen op een systeem. Regsvr32.exe geeft het systeem opdracht om te proberen het onderdeel te laden en de DLLSelfRegister-functie aan te roepen. Als deze poging slaagt, geeft Regsvr32.exe een dialoogvenster weer dat op succes wijst.

RegSvr32.exe heeft de volgende opdrachtregelopties: 

Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] dllname / s - Silent; geen berichtvakken weergeven / u - Server afmelden / i - DllInstall aanroepen en een optionele [cmdline] doorgeven; bij gebruik met / u roept dll uninstall / n op - roep DllRegisterServer niet aan; deze optie moet worden gebruikt met / i 

telefoontje RegSvr32.exe Binnen Delphi-code

Om de regsvr32-tool binnen Delphi-code aan te roepen, gebruikt u de functie "RegisterOCX" om een ​​bestand uit te voeren en wacht tot de uitvoering is voltooid.

Dit is hoe de 'RegisterOCX'-procedure eruit zou kunnen zien:

procedure RegisterOCX; type TRegFunc = functie : HResult; STDCALL; var ARegFunc: TRegFunc; aHandle: THandle; ocxPath: draad; beginnen proberen ocxPath: = ExtractFilePath (Application.ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); als aHandle 0 vervolgens beginnen ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); als Toegewezen (ARegFunc) vervolgens beginnen ExecAndWait ('regsvr32', '/ s' + ocxPath); einde; FreeLibrary (aHandle); einde; behalve ShowMessage (Format ('Kan% s niet registreren', [ocxPath])); einde; einde;

Merk op ocxPath variabele verwijst naar de 'Flash.ocx' Macromedia OCX.

Om zichzelf te kunnen registreren, moet een OCX de functie DllRegisterServer implementeren om registervermeldingen te maken voor alle klassen binnen het besturingselement. Maak je geen zorgen over de DllRegisterServer-functie, zorg er gewoon voor dat deze er is. Voor de eenvoud wordt verondersteld dat de OCX zich in dezelfde map bevindt als waar de toepassing zich bevindt.

De regel ExecAndWait in de bovenstaande code roept de regsvr32-tool op door de schakelaar "/ s" samen met het volledige pad naar de OCX door te geven. De functie is ExecAndWait.

toepassingen shellapi; ... functie ExecAndWait (const ExecuteFile, ParamString: draad): boolean; var SEInfo: TShellExecuteInfo; ExitCode: DWORD; beginnen FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); met SEInfo beginnen fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Application.Handle; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; end; als ShellExecuteEx (@SEInfo) vervolgens beginnen herhaling Application.ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); tot (ExitCode STILL_ACTIVE) of Application.Terminated; Resultaat: = true; einde anders Resultaat: = false; einde;

De functie ExecAndWait gebruikt de ShellExecuteEx API-aanroep om een ​​bestand op een systeem uit te voeren. Voor meer voorbeelden van het uitvoeren van een bestand vanuit Delphi, bekijk hoe u applicaties en bestanden vanuit Delphi-code uitvoert en uitvoert.

Flash.ocx Binnen Delphi Exe

Als het nodig is om een ​​ActiveX-besturingselement op de computer van de gebruiker te registreren, zorg er dan voor dat de gebruiker de OCX heeft die het programma vereist door de volledige ActiveX (of DLL) in de exe van de toepassing als een bron te plaatsen. Wanneer de OCX in de exe is opgeslagen, is deze eenvoudig uit te pakken, op schijf op te slaan en de RegisterOCX-procedure aan te roepen.