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
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.