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
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.