DLL i ActiveX kontrole iz Delphi aplikacije

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 
instagram viewer

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.

instagram story viewer