DLL- en ActiveX-besturingselementen vanuit een Delphi-toepassing

Een populair kenmerk van Delphi is de projectimplementatie van een applicatie 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. Gebruik het opdrachtregelprogramma regsvr32.exe om dit te voorkomen.

RegSvr32.exe-opdracht

Regsvr32.exe handmatig gebruiken (Windows. Start - Uitvoeren) registreert en registreert zelfregistreerbare DLL- en ActiveX-besturingselementen op een systeem. Regsvr32.exe geeft het systeem de 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 - Stil; geen berichtvakken weergeven. / u - Server afmelden. / i - Roep DllInstall aan en geef het een optionele [cmdline] door; bij gebruik met / u roept dll uninstall uit. / n - roep DllRegisterServer niet aan; deze optie moet worden gebruikt met / i 
instagram viewer

Bellen RegSvr32.exe Binnen Delphi-code

Om de regsvr32-tool in de 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; beginnenproberen
ocxPath: = ExtractFilePath (Toepassing. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); als aHandle 0 vervolgensbeginnen
ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); als Toegewezen (ARegFunc) vervolgensbeginnen
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: = Toepassing. Omgaan met; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; end; als ShellExecuteEx (@SEInfo) vervolgensbeginnenherhaling
Toepassing. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); tot (ExitCode STILL_ACTIVE) of Toepassing. Beëindigd; Resultaat: = Waar; eindeanders Resultaat: = niet waar; einde;

De functie ExecAndWait gebruikt de ShellExecuteEx API-aanroep om een ​​bestand op een systeem uit te voeren. Bekijk voor meer voorbeelden van het uitvoeren van een bestand vanuit Delphi applicaties en bestanden uitvoeren en uitvoeren vanuit Delphi code.

Flash.ocx Binnen Delphi Exe

Als er een ActiveX-besturingselement op de computer van de gebruiker moet worden geregistreerd, zorg er dan voor dat de gebruiker de OCX vereist het programma door de volledige ActiveX (of DLL) in de exe van de toepassing te plaatsen als een middel. 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.

instagram story viewer