Delphi rakenduse DLL ja ActiveX-juhtelemendid

Populaarne funktsioon Delphi on projekti juurutamine rakendusega käivitatav fail (exe). Kui teie projekti DLL või ActiveX-juhtelemendid pole kasutaja masinates registreeritud, kuvatakse vastusena exe-faili käitamisele teade “EOleSysError”. Selle vältimiseks kasutage käsureatööriista regsvr32.exe.

RegSvr32.exe käsk

Kasutades käsitsi regsvr32.exe (Windows. Start - Run) registreerib ja registreerib süsteemis iseregistreeritavad DLL ja ActiveX-i juhtelemendid. Regsvr32.exe juhendab süsteemi proovima komponenti laadida ja selle funktsiooni DLLSelfRegister kutsuma. Kui see katse õnnestub, kuvab Regsvr32.exe dialoogi, mis näitab edu.

RegSvr32.exe-l on järgmised käsuridade valikud:

Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] dllname. / s - vaikne; Kuva sõnumikaste pole. / u - serveri registreerimise tühistamine. / i - Call DllInstall, edastades sellele valikulise [cmdline]; kasutamisel koos / u kutsub dll desinstallida. / n - ärge helistage DllRegisterServerile; seda suvandit tuleb kasutada koos / i-ga 
instagram viewer

Helistama RegSvr32.exe Delphi koodi piires

Delphi koodis olevale tööriistale regsvr32 helistamiseks kasutage faili käivitamiseks funktsiooni „RegisterOCX” ja oodake täitmise lõppu.

Nii võiks välja näha protseduur „RegisterOCX”:

protseduur RegisterOCX; tüüp
TRegFunc = funktsiooni: HResult; stdcall; var
ARegFunc: TRegFunc; aKäepide: käepide; ocxPath: nöör; alustadaproovida
ocxPath: = ExtractFilePath (rakendus. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); kui aKäepide 0 siisalustada
ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); kui Määratud (ARegFunc) siisalustada
ExecAndWait ('regsvr32', '/ s' + ocxPath); lõpp; FreeLibrary (aHandle); lõpp; välja arvatud
ShowMessage (vorming ('% s ei saa registreerida', [ocxPath])); lõpp; lõpp;

Märkus ocxPath muutuja osutab 'Flash.ocx' Macromedia OCX-le.

Enda registreerimiseks peab OCX rakendama funktsiooni DllRegisterServer, et luua kõigi juhtelementide klasside registrikirjed. Ärge muretsege funktsiooni DllRegisterServer pärast, vaid veenduge, et see oleks olemas. Lihtsuse huvides eeldatakse, et OCX asub samas kaustas, kus rakendus on.

Ülaltoodud koodi rida ExecAndWait kutsub tööriista regsvr32, läbides lüliti "/ s" koos kogu teega OCX-i. Funktsioon on ExecAndWait.

kasutab shellapi;... funktsiooni ExecAndWait (const ExecuteFile, ParamString: nöör): loogiline; var
SEInfo: TShellExecuteInfo; ExitCode: DWORD; alustada
FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); koos SEInfo alustage
fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = rakendus. Käepide; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nNäita: = SW_HIDE; end; kui ShellExecuteEx (@SEInfo) siisalustadakorda
Rakendus. Protsessisõnumid; GetExitCodeProcess (SEInfo.hProcess, ExitCode); kuni (ExitCode STILL_ACTIVE) või rakendus. Lõpetatud; Tulemus: = tõsi; lõppmuud Tulemus: = vale; lõpp;

Funktsioon ExecAndWait kasutab faili täitmiseks süsteemis ShellExecuteEx API kutset. Lisateabe saamiseks failide Delphist käivitamise kohta leiate lisateavet selle kohta Delphi koodist rakenduste ja failide käivitamine ja käitamine.

Flash.ocx sees Delphi Exe

Kui kasutaja masinas on vaja ActiveX-juhtelementi registreerida, siis veenduge, et kasutajal on Programm nõuab OCX-i, paigutades kogu ActiveX (või DLL) rakenduse exe-sse kui a ressurss. Kui OCX on salvestatud exe-sse, on seda lihtne ekstraheerida, kettale salvestada ja protseduuri RegisterOCX kutsuda.