DLL és ActiveX vezérlők Delphi alkalmazásból

A népszerű jellemzője Delphi az alkalmazás projekt telepítése egy futtatható fájl (exe). Ha azonban a projekt DLL vagy ActiveX vezérlőit nem regisztrálták a felhasználó gépein, akkor az „EOleSysError” jelenik meg az exe fájl futtatásának válaszában. Ennek elkerülése érdekében használja a regsvr32.exe parancssori eszközt.

RegSvr32.exe parancs

A regsvr32.exe kézi használata (Windows 2003. Start - Run) regisztrálja és törli az önregisztrálható DLL és ActiveX vezérlőket egy rendszeren. A Regsvr32.exe utasítja a rendszert, hogy próbálja meg betölteni az összetevőt, és hívja meg annak DLLSelfRegister funkcióját. Ha ez a kísérlet sikeres, a Regsvr32.exe a sikert jelző párbeszédpanelt jeleníti meg.

A RegSvr32.exe a következő parancssori lehetőségekkel rendelkezik:

Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] dllname. / s - csendes; ne jelenjen meg üzenet mező. / u - Szerver regisztrációjának megszüntetése. / i - Hívja a DllInstall programot, opcionálisan továbbítva [cmdline]; / u használatával felhívja a dll eltávolítását. / n - ne hívja meg a DllRegisterServer; ezt az opciót / i-vel kell használni 
instagram viewer

Hívás RegSvr32.exe A Delphi kódon belül

A regsvr32 eszköz Delphi kódon belüli felhívásához használja a „RegisterOCX” funkciót egy fájl végrehajtásához, és várja meg, amíg a végrehajtás befejeződik.

Így néz ki a 'RegisterOCX' eljárás:

eljárás RegisterOCX; típus
TRegFunc = funkció: HResult; stdcall; var
ARegFunc: TRegFunc; aKezelés: Csonk; ocxPath: húr; kezdődikpróbáld ki
ocxPath: = ExtractFilePath (alkalmazás. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); ha aHandle 0 azutánkezdődik
ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); ha Hozzárendelt (ARegFunc) azutánkezdődik
ExecAndWait ('regsvr32', '/ s' + ocxPath); vég; FreeLibrary (aHandle); végén; kivéve
ShowMessage (formátum ('Nem sikerült regisztrálni a% s', [ocxPath])); vég; vég;

Megjegyzés: a ocxPath változó mutat a 'Flash.ocx' Macromedia OCX-re.

Annak érdekében, hogy regisztrálhassa magát, az OCX-nek végre kell hajtania a DllRegisterServer funkciót, hogy regisztrációs bejegyzéseket hozzon létre az összes osztályon a vezérlőn. Ne aggódjon a DllRegisterServer funkció miatt, csak ellenőrizze, hogy ott van-e. Az egyszerűség kedvéért feltételezzük, hogy az OCX ugyanabban a mappában található, mint ahol az alkalmazás található.

A fenti kód ExecAndWait sora felhívja a regsvr32 eszközt azáltal, hogy átadja a "/ s" kapcsolót az OCX-hez vezető teljes útvonallal együtt. A függvény az ExecAndWait.

felhasználások ShellAPI;... funkció ExecAndWait (const ExecuteFile, ParamString: húr): logikai; var
SEInfo: TShellExecuteInfo; ExitCode: DWORD; kezdődik
FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); val vel SEInfo kezdődik
fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Alkalmazás. Fogantyú; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; end; ha ShellExecuteEx (@SEInfo) azutánkezdődikismétlés
Alkalmazás. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); amíg (ExitCode STILL_ACTIVE) vagy alkalmazás. Lezárt; Eredmény: = true; végmás Eredmény: = false; vég;

Az ExecAndWait funkció a ShellExecuteEx API hívást használja a fájl végrehajtására egy rendszeren. A Delphiből származó fájlok végrehajtásának további példáit lásd: hogyan futtatni és futtatni az alkalmazásokat és fájlokat a Delphi kódból.

Flash.ocx A Delphi Exe belsejében

Ha szükség van egy ActiveX-vezérlő regisztrálására a felhasználó gépen, akkor ellenőrizze, hogy a felhasználó rendelkezik-e vele Az OCX programhoz az szükséges, hogy a teljes ActiveX-t (vagy DLL-t) az alkalmazás exe-jébe tegye forrás. Ha az OCX fájlt az exe fájlban tárolja, könnyen kivonható, menthető a lemezre, és felhívhatja a RegisterOCX eljárást.

instagram story viewer