DLL- ja ActiveX-ohjaimet Delphi-sovelluksesta

Suosittu ominaisuus Delfoi on projektin käyttöönotto sovelluksella suoritettava tiedosto (exe). Jos projektisi DLL- tai ActiveX-ohjaimia ei kuitenkaan ole rekisteröity käyttäjien koneissa, näyttöön ilmestyy ”EOleSysError” vastauksena exe-tiedoston suorittamiseen. Tämän välttämiseksi käytä regsvr32.exe-komentorivityökalua.

RegSvr32.exe-komento

Käsin manuaalisesti regsvr32.exe (Windows. Käynnistä - Suorita) rekisteröi ja rekisteröi järjestelmässä itserekisteröitävät DLL- ja ActiveX-ohjaimet. Regsvr32.exe kehottaa järjestelmää yrittämään ladata komponentin ja kutsumaan sen DLLSelfRegister-toimintoon. Jos tämä yritys onnistuu, Regsvr32.exe näyttää valintaikkunan, joka osoittaa onnistumisen.

RegSvr32.exe: llä on seuraavat komentorivivaihtoehdot:

Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] dllname. / s - hiljainen; näytä viestiruutuja. / u - Poista palvelimen rekisteröinti. / i - Soita DllInstall välittämällä se valinnainen [cmdline]; Kun sitä käytetään yhdessä / u -sovellusten kanssa, dll-asennuksen poisto tapahtuu. / n - älä soita DllRegisterServerille; tätä vaihtoehtoa on käytettävä / i: n kanssa 
instagram viewer

Puhelu Regsvr32.exe Delphi-koodin sisällä

Soittaaksesi Regsvr32-työkalulle Delphi-koodissa, suorita tiedosto “RegisterOCX” -toiminnolla suorittaaksesi tiedosto ja odotaksesi suorituksen loppuun.

Näin "RegisterOCX" -menettely voisi näyttää:

menettely RegisterOCX; tyyppi
TRegFunc = toimia: HResult; stdcall; var
ARegFunc: TRegFunc; aHandle: THandle; ocxPath: jono; alkaayrittää
ocxPath: = ExtractFilePath (Sovellus. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); jos aHandle 0 sittenalkaa
ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); jos Määritetty (ARegFunc) sittenalkaa
ExecAndWait ('regsvr32', '/ s' + ocxPath); pää; FreeLibrary (aHandle); end; paitsi
ShowMessage (Muoto ('% s ei voitu rekisteröidä', [ocxPath])); pää; pää;

Huomaa: ocxPath muuttuja osoittaa 'Flash.ocx' Macromedia OCX -sovellukseen.

Jotta itse voi rekisteröidä, OCX: n on otettava käyttöön DllRegisterServer-toiminto, jotta luodaan rekisterimerkinnät kaikille ohjauksen sisällä oleville luokille. Älä ole huolissasi DllRegisterServer-toiminnosta, varmista, että se on siellä. Yksinkertaisuuden vuoksi oletetaan, että OCX sijaitsee samassa kansiossa kuin missä sovellus on.

Yllä olevan koodin ExecAndWait-rivi kutsuu regsvr32-työkalua ohittamalla "/ s" -kytkimen täyden polun kanssa OCX: ään. Toiminto on ExecAndWait.

käyttötarkoitukset shellapi;... toimia ExecAndWait (const ExecuteFile, ParamString: jono): boolean; var
SEInfo: TShellExecuteInfo; ExitCode: DWORD; alkaa
FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); kanssa SEInfo aloitetaan
fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Sovellus. Käsitellä; lpFile: = PChar (ExecuteFile); lpParametrit: = PChar (ParamString); nNäytä: = SW_HIDE; eND; jos ShellExecuteEx (@SEInfo) sittenalkaatoistaa
Sovellus. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); siihen asti kun (ExitCode STILL_ACTIVE) tai sovellus. päättyy; Tulos: = true; päämuu Tulos: = false; pää;

ExecAndWait-toiminto käyttää ShellExecuteEx API -kutsua tiedoston suorittamiseen järjestelmässä. Katso lisää esimerkkejä minkä tahansa tiedoston suorittamisesta Delphistä suorittaa ja suorittaa sovelluksia ja tiedostoja Delphi-koodista.

Flash.ocx sisällä Delphi Exe

Jos käyttäjän koneessa on tarpeen rekisteröidä ActiveX-ohjain, varmista, että käyttäjällä on OCX-ohjelma vaatii asettamalla koko ActiveX (tai DLL) sovelluksen exe-muotoon resurssi. Kun OCX on tallennettu exe-tiedostoon, se on helppo purkaa, tallentaa levylle ja soittaa RegisterOCX-menettelyyn.