Kontrolki DLL i ActiveX z aplikacji Delphi

Popularna funkcja Delfy jest wdrożeniem projektu aplikacji z plik wykonywalny (exe). Jeśli jednak formanty DLL lub ActiveX w projekcie nie są zarejestrowane na komputerach użytkowników, w odpowiedzi na uruchomienie pliku exe zostanie wyświetlony komunikat „EOleSysError”. Aby tego uniknąć, użyj narzędzia wiersza polecenia regsvr32.exe.

Polecenie RegSvr32.exe

Ręcznie za pomocą regsvr32.exe (Windows. Start - Uruchom) zarejestruje i wyrejestruje samorejestrowalne kontrolki DLL i ActiveX w systemie. Regsvr32.exe instruuje system, aby spróbował załadować komponent i wywołać jego funkcję DLLSelfRegister. Jeśli próba się powiedzie, program Regsvr32.exe wyświetli okno dialogowe wskazujące powodzenie.

RegSvr32.exe ma następujące opcje wiersza polecenia:

Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] dllname. / s - Cichy; nie wyświetlaj żadnych okien wiadomości. / u - Wyrejestruj serwer. / i - Wywołaj DllInstall przekazując mu opcjonalną [cmdline]; w połączeniu z / u wywołuje odinstalowanie dll. / n - nie wywołuje DllRegisterServer; ta opcja musi być używana z / i 
instagram viewer

Połączenie RegSvr32.exe W kodzie Delphi

Aby wywołać narzędzie regsvr32 w kodzie Delphi, użyj funkcji „RegisterOCX” w celu wykonania pliku i poczekaj na zakończenie wykonywania.

Tak mogłaby wyglądać procedura „RegisterOCX”:

procedura RegisterOCX; rodzaj
TRegFunc = funkcjonować: HResult; stdcall; var
ARegFunc: TRegFunc; aHandle: THandle; ocxPath: strunowy; zaczynaćpróbować
ocxPath: = ExtractFilePath (Aplikacja. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); gdyby a Uchwyt 0 następniezaczynać
ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); gdyby Przypisany (ARegFunc) następniezaczynać
ExecAndWait ('regsvr32', '/ s' + ocxPath); koniec; FreeLibrary (aHandle); koniec; z wyjątkiem
ShowMessage (Format („Nie można zarejestrować% s”, [ocxPath])); koniec; koniec;

Zanotuj ocxPath zmienna wskazuje Macromedia OCX „Flash.ocx”.

Aby móc się zarejestrować, OCX musi zaimplementować funkcję DllRegisterServer, aby utworzyć wpisy rejestru dla wszystkich klas wewnątrz kontrolki. Nie martw się o funkcję DllRegisterServer, po prostu upewnij się, że ona tam jest. Dla uproszczenia zakłada się, że OCX znajduje się w tym samym folderze, w którym znajduje się aplikacja.

Linia ExecAndWait w powyższym kodzie wywołuje narzędzie regsvr32, przekazując przełącznik „/ s” wraz z pełną ścieżką do OCX. Ta funkcja to ExecAndWait.

wykorzystuje shellapi;... funkcjonować ExecAndWait (const ExecuteFile, ParamString: strunowy): boolean; var
SEInfo: TShellExecuteInfo; ExitCode: DWORD; zaczynać
FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); z SEInfo zaczynać
fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Aplikacja. Uchwyt; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); n Pokaż: = SW_HIDE; mind; gdyby ShellExecuteEx (@SEInfo) następniezaczynaćpowtarzać
Podanie. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); aż do (ExitCode STILL_ACTIVE) lub Aplikacja. Zakończony; Wynik: = prawda; koniecjeszcze Wynik: = Fałsz; koniec;

Funkcja ExecAndWait używa wywołania API ShellExecuteEx do wykonania pliku w systemie. Aby uzyskać więcej przykładów wykonywania dowolnego pliku z Delphi, sprawdź, jak to zrobić uruchamiać i uruchamiać aplikacje i pliki z kodu Delphi.

Flash.ocx Inside Delphi Exe

Jeśli istnieje potrzeba zarejestrowania formantu ActiveX na komputerze użytkownika, upewnij się, że użytkownik go ma OCX program wymaga umieszczenia całego ActiveX (lub DLL) w exe aplikacji jako ratunek. Gdy OCX jest przechowywany w pliku exe, łatwo jest go wyodrębnić, zapisać na dysku i wywołać procedurę RegisterOCX.

instagram story viewer