O caracteristică populară a Delphi este implementarea proiectului unei aplicații cu un fișier executabil (exe). Cu toate acestea, dacă controalele DLL sau ActiveX din proiectul dvs. nu sunt înregistrate pe utilajele utilizatorilor, va apărea un „EOleSysError” ca răspuns la executarea fișierului exe. Pentru a evita acest lucru, utilizați instrumentul pentru linia de comandă regsvr32.exe.
Folosind manual regsvr32.exe (Windows.Start - Run) se vor înregistra și anula înregistrarea controalelor DLL și ActiveX auto-înregistrabile pe un sistem. Regsvr32.exe instruiește sistemul să încerce să încarce componenta și să apeleze funcția DLLSelfRegister. Dacă această încercare este reușită, Regsvr32.exe afișează un dialog care indică succesul.
RegSvr32.exe are următoarele opțiuni de linie de comandă:
Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] dllname / s - Silent; afișează nicio casetă de mesaje / u - Anulează serverul de înregistrare / i - Apelați DllInstall trecându-i opțional [cmdline]; atunci când este folosit cu / u apeluri dll dezinstalare / n - nu apelați DllRegisterServer; această opțiune trebuie utilizată cu / i
Apel RegSvr32.exe În codul Delphi
Pentru a apela instrumentul regsvr32 din codul Delphi, utilizați funcția „RegisterOCX” pentru a executa un fișier și așteptați finalizarea execuției..
Așa ar putea arăta procedura „RegisterOCX”:
procedură RegisterOCX; tip TRegFunc = funcţie : HResult; stdcall; var ARegFunc: TRegFunc; aHandle: Thandle; ocxPath: şir; începe încerca ocxPath: = ExtractFilePath (Application.ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); dacă aHandle 0 apoi începe ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); dacă Atribuit (ARegFunc) apoi începe ExecAndWait ('regsvr32', '/ s' + ocxPath); Sfârșit; FreeLibrary (aHandle); Sfârșit; cu exceptia ShowMessage (Format ('Nu se poate înregistra% s', [ocxPath])); Sfârșit; Sfârșit;
Notă: ocxPath puncte variabile către „Flash.ocx” Macromedia OCX.
Pentru a se putea înregistra, OCX trebuie să implementeze funcția DllRegisterServer pentru a crea intrări de registru pentru toate clasele din control. Nu vă faceți griji pentru funcția DllRegisterServer, doar asigurați-vă că este acolo. Din simplitate, se presupune că OCX se află în același dosar ca și unde se află aplicația.
Linia ExecAndWait din codul de mai sus apelează instrumentul regsvr32 trecând comutatorul "/ s" împreună cu calea completă către OCX. Funcția este ExecAndWait.
utilizări shellapi; ... funcţie ExecAndWait (const ExecuteFile, ParamString: şir): boolean; var SEInfo: TShellExecuteInfo; ExitCode: DWORD; începe FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); cu SEInfo începe fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Application.Handle; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); n Afisare: = SW_HIDE; end; dacă ShellExecuteEx (@SEInfo) apoi începe repeta Application.ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); pana cand (ExitCode STILL_ACTIVE) sau Application.Terminated; Rezultat: = true; Sfârșit altfel Rezultat: = false; Sfârșit;
Funcția ExecAndWait utilizează apelul API ShellExecuteEx pentru a executa un fișier într-un sistem. Pentru mai multe exemple de executare a oricărui fișier de la Delphi, verificați cum să executați și să executați aplicații și fișiere din codul Delphi.
Dacă este necesar să înregistrați un control ActiveX pe mașina utilizatorului, atunci asigurați-vă că utilizatorul are OCX pe care programul îl solicită plasând întreg ActiveX (sau DLL) în interiorul aplicației exe ca resursă. Când OCX este stocat în exe, este ușor de extras, de salvat pe disc și de apelat la procedura RegisterOCX.