Populární vlastnost Delphi je nasazení projektu s aplikací spustitelný soubor (exe). Pokud však ovládací prvky DLL nebo ActiveX ve vašem projektu nejsou zaregistrovány na počítačích uživatelů, zobrazí se jako odpověď na spuštění souboru exe „EOleSysError“. Chcete-li tomu zabránit, použijte nástroj příkazového řádku regsvr32.exe.
Příkaz RegSvr32.exe
Ručně pomocí regsvr32.exe (Windows. Start - Run) zaregistruje a zruší registraci samoregistrovatelných ovládacích prvků DLL a ActiveX v systému. Regsvr32.exe dá pokyn systému, aby se pokusil načíst součást a zavolal její funkci DLLSelfRegister. Pokud je tento pokus úspěšný, zobrazí Regsvr32.exe dialogové okno označující úspěch.
RegSvr32.exe má následující možnosti příkazového řádku:
Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] dllname. / s - Tichý; nezobrazí žádné zprávy. / u - Zrušit registraci serveru. / i - Volejte DllInstall a předejte volitelný [cmdline]; při použití / u volání dll odinstalovat. / n - nevolajte DllRegisterServer; tato volba musí být použita s / i
Volání RegSvr32.exe V kódu Delphi
Chcete-li zavolat nástroj regsvr32 v kódu Delphi, použijte funkci „RegisterOCX“ k provedení souboru a vyčkejte na dokončení provádění.
Takto by mohl vypadat postup „RegisterOCX“:
postup RegisterOCX; typ TRegFunc = funkce: HResult; stdcall; var ARegFunc: TRegFunc; aHandle: THandle; ocxPath: tětiva; začítSnaž se ocxPath: = ExtractFilePath (Aplikace. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); -li aHandle 0 pakzačít ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); -li Přiřazeno (ARegFunc) pakzačít ExecAndWait ('regsvr32', '/ s' + ocxPath); konec; FreeLibrary (aHandle); konec; až na ShowMessage (Format ('Nelze zaregistrovat% s', [ocxPath])); konec; konec;
Poznámka: ocxPath proměnná ukazuje na „Flash.ocx“ Macromedia OCX.
Aby se mohl sám zaregistrovat, musí OCX implementovat funkci DllRegisterServer k vytvoření položek registru pro všechny třídy uvnitř ovládacího prvku. Nedělejte si starosti s funkcí DllRegisterServer, ujistěte se, že tam je. Kvůli jednoduchosti se předpokládá, že OCX je umístěn ve stejné složce jako aplikace.
Řádek ExecAndWait ve výše uvedeném kódu volá nástroj regsvr32 předáním přepínače "/ s" spolu s úplnou cestou k OCX. Funkce je ExecAndWait.
použití shellapi;... funkce ExecAndWait (konst ExecuteFile, ParamString: tětiva): boolean; var SEInfo: TShellExecuteInfo; ExitCode: DWORD; začít FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); s SEInfo začnou fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Aplikace. Rukojeť; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; End; -li ShellExecuteEx (@SEInfo) pakzačítopakovat Aplikace. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); dokud (ExitCode STILL_ACTIVE) nebo aplikace. Ukončeno; Výsledek: = True; konecjiný Výsledek: = Falešný; konec;
Funkce ExecAndWait používá volání ShellExecuteEx API k provedení souboru v systému. Další příklady provedení libovolného souboru z Delphi najdete v článku spouštět a spouštět aplikace a soubory z kódu Delphi.
Flash.ocx Uvnitř Delphi Exe
Pokud je potřeba zaregistrovat ovládací prvek ActiveX na stroji uživatele, ujistěte se, že má uživatel OCX program vyžaduje umístěním celého ActiveX (nebo DLL) do exe aplikace jako a zdroj. Když je OCX uložen uvnitř exe, je snadné jej extrahovat, uložit na disk a vyvolat proceduru RegisterOCX.