Элементы управления DLL и ActiveX из приложения Delphi

Популярная особенность 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 
instagram viewer

Вызов 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.

instagram story viewer