DLL- og ActiveX-kontroller fra en Delphi-applikation

click fraud protection

Et populært træk ved Delphi er projektinstallationen af ​​en applikation med en eksekverbar fil (exe). Hvis DLL- eller ActiveX-kontrollerne i dit projekt ikke er registreret på brugernes maskiner, vises en "EOleSysError" som svar på kørsel af exe-filen. Brug kommandolinjeværktøjet regsvr32.exe for at undgå dette.

RegSvr32.exe kommando

Manuelt ved hjælp af regsvr32.exe (Windows. Start - Run) vil registrere og afregistrere selvregistrerbare DLL- og ActiveX-kontroller på et system. Regsvr32.exe instruerer systemet til at forsøge at indlæse komponenten og kalde dens DLLSelfRegister-funktion. Hvis dette forsøg er vellykket, viser Regsvr32.exe en dialog, der angiver succes.

RegSvr32.exe har følgende kommandolinjemuligheder:

Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] dllname. / s - Stille; Vis ingen meddelelsesbokse. / u - Afregistrer server. / i - Ring til DllInstall, der giver det en valgfri [cmdline]; når det bruges med / u-opkald dll afinstallere. / n - ikke ring til DllRegisterServer; denne indstilling skal bruges med / i 
instagram viewer

Opkald Regsvr32.exe Inden for Delphi-kode

For at kalde regsvr32-værktøjet inden for Delphi-kode skal du bruge funktionen "RegisterOCX" til at udføre en fil og vente på, at udførelsen er afsluttet.

Sådan kan proceduren 'RegisterOCX' se ud:

procedure RegisterOCX; type
TRegFunc = fungere: HResult; stdcall; Var
ARegFunc: TRegFunc; aHandle: THandle; ocxPath: snor; begyndeprøve
ocxPath: = ExtractFilePath (ansøgning. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); hvis aHandle 0 derefterbegynde
ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); hvis Tildelt (ARegFunc) derefterbegynde
ExecAndWait ('regsvr32', '/ s' + ocxPath); ende; FreeLibrary (aHandle); ende; undtagen
ShowMessage (Format ('Kan ikke registrere% s', [ocxPath])); ende; ende;

Bemærk: ocxPath variabel peger på 'Flash.ocx' Macromedia OCX.

For at kunne registrere sig selv, skal en OCX implementere DllRegisterServer-funktionen for at oprette registerposter til alle klasser inde i kontrollen. Må ikke bekymre dig om DllRegisterServer-funktionen, bare sørg for, at den er der. Af enkeltheds skyld antages det, at OCX er placeret i den samme mappe, som hvor applikationen er.

Linjen ExecAndWait i ovenstående kode kalder regsvr32-værktøjet ved at sende "/ s" -skifteren sammen med den fulde sti til OCX. Funktionen er ExecAndWait.

anvendelser shellapi;... fungere ExecAndWait (const ExecuteFile, ParamString: snor): boolsk; Var
SEInfo: TShellExecuteInfo; ExitCode: DWORD; begynde
FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); med SEInfo begynder
fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Anvendelse. Håndtere; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; end; hvis ShellExecuteEx (@SEInfo) derefterbegyndegentage
Ansøgning. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); indtil (ExitCode STILL_ACTIVE) eller ansøgning. opsagte; Resultat: = true; endeandet Resultat: = false; ende;

ExecAndWait-funktionen bruger ShellExecuteEx API-opkaldet til at udføre en fil på et system. For flere eksempler på eksekvering af en fil fra Delphi, se, hvordan man gør det udføre og køre applikationer og filer fra Delphi-kode.

Flash.ocx inde i Delphi Exe

Hvis der er behov for at registrere en ActiveX-kontrol på brugerens maskine, skal du sørge for, at brugeren har OCX kræver programmet ved at placere hele ActiveX (eller DLL) inde i applikationens exe som en ressource. Når OCX er gemt inde i exen, er det let at udtrække, gemme på disk og kalde RegisterOCX-proceduren.

instagram story viewer