Controle DLL și ActiveX dintr-o aplicație Delphi

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 mașinile 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.

Comanda RegSvr32.exe

Folosind manual regsvr32.exe (Windows. Start - Run) va înregistra și va înregistra controale auto-înregistrabile DLL și ActiveX 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]] nume dll. / s - Tăcut; nu afișează casete 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 
instagram viewer

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 (aplicație). 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: = Cerere. Mâner; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); n Afisare: = SW_HIDE; end; dacă ShellExecuteEx (@SEInfo) apoiînceperepeta
Aplicație. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); pana cand (ExitCode STILL_ACTIVE) sau aplicație. încheiată; Rezultat: = true; Sfârșitaltfel Rezultat: = false; Sfârșit;

Funcția ExecAndWait folosește 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 executați aplicații și fișiere din codul Delphi.

Flash.ocx în interiorul Delphi Exe

Dacă este necesar să înregistrați un control ActiveX pe mașina utilizatorului, atunci asigurați-vă că acesta îl are Programul OCX necesită prin plasarea întregului ActiveX (sau DLL) în interiorul aplicației exe ca resursă. Când OCX este stocat în cadrul exe, este ușor de extras, de salvat pe disc și de apelat la procedura RegisterOCX.