Популярная особенность Delphi это развертывание проекта приложения с исполняемый файл (exe). Однако, если элементы управления DLL или ActiveX в вашем проекте не зарегистрированы на компьютерах пользователей, в ответ на запуск exe-файла будет отображаться «EOleSysError». Чтобы избежать этого, используйте инструмент командной строки regsvr32.exe.
Команда RegSvr32.exe
Вручную с помощью regsvr32.exe (Windows. Пуск - Выполнить) будет регистрировать и отменять регистрацию саморегистративных элементов управления DLL и ActiveX в системе. Regsvr32.exe дает команду системе попытаться загрузить компонент и вызвать его функцию DLLSelfRegister. Если эта попытка успешна, Regsvr32.exe отображает диалоговое окно с указанием успеха.
RegSvr32.exe имеет следующие параметры командной строки:
Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] dllname. / s - Тихий; не отображать сообщения / u - Отменить регистрацию сервера. / i - вызвать DllInstall, передавая его необязательно [cmdline]; При использовании с / U вызывает DLL удалить. / n - не вызывать DllRegisterServer; эта опция должна использоваться с / i
Вызов RegSvr32.exe В коде Delphi
Чтобы вызвать инструмент regsvr32 в коде Delphi, используйте функцию «RegisterOCX» для запуска файла и дождитесь окончания выполнения.
Вот как могла бы выглядеть процедура RegisterOCX:
процедура RegisterOCX; тип TRegFunc = функция: HResult; STDCALL; вар ARegFunc: TRegFunc; Рукоятка: Тандл; ocxPath: строка; начатьпытаться ocxPath: = ExtractFilePath (Приложение. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); если aHandle 0 тогданачать ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); если Назначено (ARegFunc) тогданачать ExecAndWait ('regsvr32', '/ s' + ocxPath); конец; FreeLibrary (aHandle); конец; Кроме ShowMessage (Format («Невозможно зарегистрировать% s», [ocxPath])); конец; конец;
Обратите внимание ocxPath переменная указывает на «Flash.ocx» Macromedia OCX.
Чтобы иметь возможность зарегистрироваться, OCX должен реализовать функцию DllRegisterServer для создания записей реестра для всех классов внутри элемента управления. Не беспокойтесь о функции DllRegisterServer, просто убедитесь, что она есть. Для простоты предполагается, что OCX находится в той же папке, где находится приложение.
Строка ExecAndWait в приведенном выше коде вызывает инструмент regsvr32, передавая ключ "/ s" вместе с полным путем к OCX. Функция является ExecAndWait.
использования ShellAPI;... функция ExecAndWait (Const ExecuteFile, ParamString: строка): логическое значение; вар SEInfo: TShellExecuteInfo; ExitCode: DWORD; начать FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); с SEInfo начать fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Приложение. Ручка; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; ей; если ShellExecuteEx (@SEInfo) тогданачатьповторение Заявка. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); до того как (ExitCode STILL_ACTIVE) или приложение. Отменено; Результат: = True; конецеще Результат: = False; конец;
Функция ExecAndWait использует API-вызов ShellExecuteEx для выполнения файла в системе. Для большего количества примеров выполнения любого файла из Delphi, проверьте, как запускать и запускать приложения и файлы из кода Delphi.
Flash.ocx внутри Delphi Exe
Если необходимо зарегистрировать элемент управления ActiveX на компьютере пользователя, убедитесь, что у пользователя есть OCX, который требуется программе, поместив весь ActiveX (или DLL) в исполняемый файл приложения как ресурс. Когда OCX хранится внутри исполняемого файла, его легко извлечь, сохранить на диск и вызвать процедуру RegisterOCX.