Kontrole DLL in ActiveX iz aplikacije Delphi

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 
instagram viewer

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.

instagram story viewer