Ovládacie prvky DLL a ActiveX z aplikácie Delphi

click fraud protection

Populárna vlastnosť Delphi je projektové nasadenie aplikácie s spustiteľný súbor (exe). Ak však ovládacie prvky DLL alebo ActiveX vo vašom projekte nie sú zaregistrované na počítačoch používateľov, ako odpoveď na spustenie súboru exe sa zobrazí „EOleSysError“. Aby ste tomu zabránili, použite nástroj príkazového riadka regsvr32.exe.

Príkaz RegSvr32.exe

Ručné používanie regsvr32.exe (Windows. Štart - Spustiť) zaregistruje a zruší registráciu samoregistrovateľných ovládacích prvkov DLL a ActiveX v systéme. Regsvr32.exe dá pokyn systému, aby sa pokúsil načítať komponent a zavolal jeho funkciu DLLSelfRegister. Ak je tento pokus úspešný, program Regsvr32.exe zobrazí dialógové okno označujúce úspech.

RegSvr32.exe má nasledujúce možnosti príkazového riadku:

Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] dllname. / s - tichý; zobraziť žiadne správy. / u - Zrušiť registráciu servera. / i - Zavolajte DllInstall odovzdaním voliteľného [cmdline]; pri použití s ​​/ u hovory dll odinštalovať. / n - nevolajte server DllRegisterServer; táto voľba musí byť použitá s / i 
instagram viewer

volanie Regsvr32.exe V rámci kódu Delphi

Ak chcete zavolať nástroj regsvr32 v rámci kódu Delphi, použite funkciu „RegisterOCX“ na vykonanie súboru a počkajte, kým sa dokončenie neskončí.

Takto by mohol vyzerať postup „RegisterOCX“:

procedúra RegisterOCX; typ
TRegFunc = funkcie: HResult; stdcall; var
ARegFunc: TRegFunc; aHandle: THandle; ocxPath: povrázok; začaťvyskúšať
ocxPath: = ExtractFilePath (Aplikácia. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); ak aHandle 0 potomzačať
ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); ak Priradené (ARegFunc) potomzačať
ExecAndWait ('regsvr32', '/ s' + ocxPath); koniec; FreeLibrary (aHandle); koniec; leč
ShowMessage (Format ('Nedá sa zaregistrovať% s', [ocxPath])); koniec; koniec;

Poznámka: ocxPath premenná ukazuje na „Flash.ocx“ Macromedia OCX.

Aby sa OCX mohla zaregistrovať sama, musí implementovať funkciu DllRegisterServer, aby vytvorila položky registra pre všetky triedy v ovládacom prvku. Nerobte si starosti s funkciou DllRegisterServer, len sa uistite, že tam je. Z dôvodu jednoduchosti sa predpokladá, že OCX sa nachádza v rovnakom priečinku ako je aplikácia.

Riadok ExecAndWait vo vyššie uvedenom kóde volá nástroj regsvr32 odovzdaním prepínača "/ s" spolu s úplnou cestou k OCX. Táto funkcia je ExecAndWait.

použitie shellapi;... funkcie ExecAndWait (const ExecuteFile, ParamString: povrázok): boolean; var
SEInfo: TShellExecuteInfo; ExitCode: DWORD; začať
FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); s SEInfo začínam
fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Aplikácia. zvládnuť; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; end; ak ShellExecuteEx (@SEInfo) potomzačaťopakovať
Aplikácie. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); kým (ExitCode STILL_ACTIVE) alebo Aplikácia. ukončený; Výsledok: = TRUE; koniecinak Výsledok: = FALSE; koniec;

Funkcia ExecAndWait používa volanie ShellExecuteEx API na vykonanie súboru v systéme. Viac príkladov spustenia ľubovoľného súboru od spoločnosti Delphi nájdete v článku spúšťať a spúšťať aplikácie a súbory z kódu Delphi.

Flash.ocx Inside Delphi Exe

Ak je potrebné zaregistrovať ovládací prvok ActiveX na stroji používateľa, uistite sa, že má používateľ OCX program vyžaduje umiestnením celého ActiveX (alebo DLL) do exe aplikácie ako a zdrojov. Keď je OCX uložený vo vnútri exe, je ľahké ho extrahovať, uložiť na disk a vyvolať postup RegisterOCX.

instagram story viewer