DLL un ActiveX vadīklas no Delphi lietojumprogrammas

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

instagram viewer

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.

instagram story viewer