Popularna značajka Delphi je projektno pokretanje aplikacije s izvršna datoteka (exe). Međutim, ako DLL ili ActiveX kontrole u vašem projektu nisu registrirane na računalima korisnika, prikazat će se „EOleSysError“ kao odgovor na pokretanje exe datoteke. Da biste to izbjegli, upotrijebite alat naredbenog retka regsvr32.exe.
Naredba RegSvr32.exe
Ručno korištenje regsvr32.exe (Windows. Start - Run) registrirat će i odjaviti samoregistrirajuće DLL i ActiveX kontrole na sustavu. Regsvr32.exe upućuje sustav da pokuša učitati komponentu i nazove svoju funkciju DLLSelfRegister. Ako je ovaj pokušaj uspješan, Regsvr32.exe prikazuje dijaloški okvir koji ukazuje na uspjeh.
RegSvr32.exe ima sljedeće mogućnosti naredbenog retka:
Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] ime dllname. / s - tiho; prikaz bez okvira za poruke. / u - Poništi registraciju poslužitelja. / i - nazovite DllInstall dajući mu fakultativni [cmdline]; kad se koristi sa / u pozivima dll deinstall. / n - nemojte zvati DllRegisterServer; ova se opcija mora koristiti s / i
Poziv RegSvr32.exe Unutar Delphi koda
Da biste pozvali regsvr32 alat unutar Delphi koda, pomoću funkcije "RegisterOCX" izvršite datoteku i pričekajte da se izvršenje završi.
Ovako bi mogao izgledati postupak 'RegisterOCX':
postupak RegisterOCX; tip TRegFunc = funkcija: HResult; stdcall; var ARegFunc: TRegFunc; aHandle: THandle; ocxPath: niz; početiprobati ocxPath: = ExtractFilePath (aplikacija. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); ako aHandle 0 zatimpočeti ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); ako Dodijeljeno (ARegFunc) zatimpočeti ExecAndWait ('regsvr32', '/ s' + ocxPath); kraj; FreeLibrary (aHandle); kraj; osim ShowMessage (Format ('Nije moguće registrirati% s', [ocxPath])); kraj; kraj;
Napomena: ocxPath varijabla upućuje na "Flash.ocx" Macromedia OCX.
Da bi se mogao registrirati, OCX mora implementirati funkciju DllRegisterServer za stvaranje unosa u registre za sve klase unutar kontrole. Ne brinite o funkciji DllRegisterServer, samo provjerite je li tu. Radi jednostavnosti, pretpostavlja se da se OCX nalazi u istoj mapi kao i aplikacija.
Linija ExecAndWait u gornjem kôdu poziva regsvr32 alat prolazeći prekidač "/ s" zajedno s punim putem do OCX. Funkcija je ExecAndWait.
namjene shellapi;... funkcija ExecAndWait (const ExecuteFile, ParamString: niz): boolean; var SEInfo: TShellExecuteInfo; ExitCode: DWORD; početi FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); s SEInfo započeti fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Primjena. Ručka; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; end; ako ShellExecuteEx (@SEInfo) zatimpočetiponoviti Primjena. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); do (Izlazni kod STILL_ACTIVE) ili aplikacija. prekinut; Rezultat: = True; krajdrugo Rezultat: = False; kraj;
Funkcija ExecAndWait koristi poziv ShellExecuteEx API za izvršavanje datoteke u sustavu. Za više primjera izvršenja bilo koje datoteke iz Delphija, pogledajte kako izvršavanje i pokretanje aplikacija i datoteka iz Delphi koda.
Flash.ocx Unutra Delphi Exe
Ako postoji potreba za registracijom ActiveX kontrole na korisničkom stroju, provjerite je li korisnik OCX koji program zahtijeva postavljanjem čitavog ActiveX-a (ili DLL-a) unutar ege programa kao a resurs. Kad se OCX pohrani u exe, lako ga je izdvojiti, spremiti na disk i pozvati postupak RegisterOCX.