Populāra iezīme Delfi ir projekta ieviešana lietojumprogrammā ar izpildāmais fails (exe). Tomēr, ja DLL vai ActiveX vadīklas jūsu projektā nav reģistrētas lietotāju mašīnās, atbildi uz exe faila palaišanu parādīs “EOleSysError”. Lai no tā izvairītos, izmantojiet komandrindas rīku regsvr32.exe.
Komanda RegSvr32.exe
Manuāli izmantojot regsvr32.exe (Windows. Sākt - palaist) sistēmā reģistrēs un nereģistrēs pašreģistrējamus DLL un ActiveX vadīklas. Regsvr32.exe uzdod sistēmai mēģināt ielādēt komponentu un izsaukt tā funkciju DLLSelfRegister. Ja šis mēģinājums ir veiksmīgs, Regsvr32.exe parāda dialoglodziņu, kurā norāda panākumus.
RegSvr32.exe ir šādas komandrindas opcijas:
Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] dllname. / s - kluss; nerādīt ziņojumu lodziņus. / u - noņemiet servera reģistrāciju. / i - Call DllInstall, nododot tai izvēles iespēju [cmdline]; ja to lieto kopā ar / u aicina dll atinstalēt. / n - neizsauciet DllRegisterServer; šī opcija jāizmanto kopā ar / i
Zvaniet RegSvr32.exe Delfu koda ietvaros
Lai izsauktu regsvr32 rīku Delphi kodā, izmantojiet funkciju “RegisterOCX”, lai izpildītu failu un gaidiet, līdz izpildīšana tiks pabeigta.
Šādi varētu izskatīties 'RegisterOCX' procedūra:
procedūra RegisterOCX; tips TRegFunc = funkcija: HResult; stdcall; var ARegFunc: TRegFunc; aHandle: Thandle; ocxPath: virkne; sāktmēģiniet ocxPath: = ExtractFilePath (lietojumprogramma. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); ja aRokturis 0 tadsākt ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); ja Piešķirts (ARegFunc) tadsākt ExecAndWait ('regsvr32', '/ s' + ocxPath); beigas; FreeLibrary (aHandle); beigas; izņemot ShowMessage (Formāts ('Nevar reģistrēt% s', [ocxPath])); beigas; beigas;
Piezīme ocxPath mainīgie norāda uz 'Flash.ocx' Macromedia OCX.
Lai OCX varētu reģistrēt sevi, OCX jāīsteno funkcija DllRegisterServer, lai izveidotu reģistru ierakstus visām kontrolē esošajām klasēm. Neuztraucieties par funkciju DllRegisterServer, tikai pārliecinieties, vai tā ir tur. Vienkāršības labad tiek pieņemts, ka OCX atrodas tajā pašā mapē, kur atrodas lietojumprogramma.
Iepriekš minētajā kodā redzamā rindiņa ExecAndWait izsauc rīku regsvr32, nododot slēdzi "/ s" ar pilnu ceļu uz OCX. Funkcija ir ExecAndWait.
izmanto šellapi;... funkcija ExecAndWait (const ExecuteFile, ParamString: virkne): Būla; var SEInfo: TShellExecuteInfo; ExitCode: DWORD; sākt FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); ar SEInfo jāsāk fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Pieteikums. Rokturis; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nRādīt: = SW_HIDE; end; ja ShellExecuteEx (@SEInfo) tadsāktatkārtot Pieteikums. Procesa ziņojumi; GetExitCodeProcess (SEInfo.hProcess, ExitCode); līdz (ExitCode STILL_ACTIVE) vai lietojumprogramma. Likvidēts; Rezultāts: = patiess; beigascits Rezultāts: = nepatiess; beigas;
Funkcija ExecAndWait faila izpildīšanai sistēmā izmanto ShellExecuteEx API zvanu. Lai uzzinātu vairāk par jebkura Delphi faila izpildes piemēriem, pārbaudiet, kā to izdarīt izpildīt un palaist programmas un failus no Delphi koda.
Flash.ocx iekšpusē Delphi Exe
Ja lietotāja mašīnā ir jāreģistrē ActiveX vadīklas, pārliecinieties, vai lietotājam ir OCX, ko prasa programma, visu ActiveX (vai DLL) ievietojot lietojumprogrammas exe failā kā resurss. Kad OCX tiek glabāts exe iekšpusē, to ir viegli iegūt, saglabāt diskā un piezvanīt uz reģistra OCX procedūru.