Priljubljena funkcija Delphi je projektna namestitev aplikacije z izvršljiva datoteka (exe). Če pa kontrolniki DLL ali ActiveX v vašem projektu niso registrirani na uporabnikovih napravah, se bo kot odgovor na zagon datoteke exe prikazal "EOleSysError". Če se želite temu izogniti, uporabite orodje regsvr32.exe ukazne vrstice.
Ukaz RegSvr32.exe
Ročna uporaba regsvr32.exe (Windows. Start - Run) bo v sistemu registriral in odjavil samoregistrirane kontrole DLL in ActiveX. Regsvr32.exe sistem naroči sistemu, naj poskusi naložiti komponento in pokliče svojo funkcijo DLLSelfRegister. Če je ta poskus uspešen, Regsvr32.exe prikaže pogovorno okno, ki kaže na uspeh.
RegSvr32.exe ima naslednje možnosti ukazne vrstice:
Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] ime imena. / s - Tiho; zaslon ni sporočil. / u - Odjavite strežnik. / i - pokličite DllInstall in mu dodajte neobvezno [cmdline]; ko se uporablja z / u klici odstranite dll. / n - ne pokliči DllRegisterServer; to možnost je treba uporabiti z / i
Pokliči RegSvr32.exe Znotraj kode Delphi
Če želite poklicati orodje regsvr32 znotraj kode Delphi, s funkcijo »RegisterOCX« izvedite datoteko in počakajte, da se izvedba konča.
Takole bi lahko izgledal postopek "RegisterOCX":
postopek RegisterOCX; tip TRegFunc = funkcijo: HResult; stdcall; var ARegFunc: TRegFunc; aHandle: THandle; ocxPath: vrvica; začetiposkusi ocxPath: = ExtractFilePath (aplikacija. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); če aHandle 0 torejzačeti ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); če Dodeljeno (ARegFunc) torejzačeti ExecAndWait ('regsvr32', '/ s' + ocxPath); konec; FreeLibrary (aHandle); konec; razen ShowMessage (Oblika ('Ni mogoče registrirati% s', [ocxPath])); konec; konec;
Opomba: ocxPath spremenljivka kaže na Macromedia OCX 'Flash.ocx'.
Če se lahko registrirate, mora OCX izvajati funkcijo DllRegisterServer za ustvarjanje vnosov v registre za vse razrede znotraj nadzora. Ne skrbite za funkcijo DllRegisterServer, le prepričajte se, da je tam. Zaradi poenostavitve se domneva, da se OCX nahaja v isti mapi, kot je aplikacija.
Vrstica ExecAndWait v zgornji kodi pokliče orodje regsvr32 s prehodom stikala "/ s" skupaj s celotno potjo do OCX. Funkcija je ExecAndWait.
uporablja šelapi;... funkcijo ExecAndWait (konst ExecuteFile, ParamString: vrvica): boolean; var SEInfo: TShellExecuteInfo; Izhodna koda: DWORD; začeti FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); s SEInfo začeti fMaska: = SEE_MASK_NOCLOSEPROCESS; Wnd: = aplikacija. Ročaj; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; end; če ShellExecuteEx (@SEInfo) torejzačetiponovite Uporaba. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); dokler (ExitCode STILL_ACTIVE) ali aplikacije. Odpovedan; Rezultat: = Res; konecdrugače Rezultat: = napačno; konec;
Funkcija ExecAndWait uporablja klic API ShellExecuteEx za izvedbo datoteke v sistemu. Če želite več primerov izvajanja katere koli datoteke iz Delphija, si oglejte kako izvajati in zagnati aplikacije in datoteke iz kode Delphi.
Flash.ocx v notranjosti Delphi Exe
Če je treba registrirati krmilnik ActiveX na uporabnikovem računalniku, se prepričajte, da ima uporabnik OCX, ki ga program potrebuje, tako da celoten ActiveX (ali DLL) umestite v exe aplikacije kot vir. Ko je OCX shranjen znotraj exe, ga je enostavno ekstrahirati, shraniti na disk in poklicati RegisterOCX postopek.