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