Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Зарегистрировать или удалить OCX, ActiveX

Delphi , Технологии , ActiveX

Зарегистрировать или удалить OCX, ActiveX

Приходит жена программиста с работы, а муж весь расстроенный.
- Миша, что случилось?
- Мама умерла... да погоди радоваться, не моя - у компа..


{1.} 

type 
  TDllRegisterServer = function: HResult; stdcall; 

function RegisterOCX(FileName: string): Boolean; 
var 
  OCXHand: THandle; 
  RegFunc: TDllRegisterServer; 
begin 
  OCXHand := LoadLibrary(PChar(FileName)); 
  RegFunc := GetProcAddress(OCXHand, 'DllRegisterServer'); 
  if @RegFunc <> nil then 
    Result := RegFunc = S_OK 
  else 
    Result := False; 
  FreeLibrary(OCXHand); 
end; 

function UnRegisterOCX(FileName: string): Boolean; 
var 
  OCXHand: THandle; 
  RegFunc: TDllRegisterServer; 
begin 
  OCXHand := LoadLibrary(PChar(FileName)); 
  RegFunc := GetProcAddress(OCXHand, 'DllUnregisterServer'); 
  if @RegFunc <> nil then 
    Result := RegFunc = S_OK 
  else 
    Result := False; 
  FreeLibrary(OCXHand); 
end; 

{**********} 

{2.} 

function RegisterServer(const aDllFileName: string; aRegister: Boolean): Boolean; 
type 
  TRegProc = function: HResult; 
  stdcall; 
const 
  cRegFuncNameArr: array [Boolean] of PChar = 
    ('DllUnregisterServer', 'DllRegisterServer'); 
var 
  vLibHandle: THandle; 
  vRegProc: TRegProc; 
begin 
  Result := False; 
  vLibHandle := LoadLibrary(PChar(aDllFileName)); 
  if vLibHandle = 0 then Exit; 
    @vRegProc := GetProcAddress(vLibHandle, cRegFuncNameArr[aRegister]); 
  if @vRegProc <> nil then 
    Result := vRegProc = S_OK; 
  FreeLibrary(vLibHandle); 
end;

Here is the translation of the content into Russian:

Код 1:

type
  TDllRegisterServer = function: HResult; stdcall;

function RegisterOCX(FileName: string): Boolean;
var
  OCXHand: THandle;
  RegFunc: TDllRegisterServer;
begin
  OCXHand := LoadLibrary(PChar(FileName));
  RegFunc := GetProcAddress(OCXHand, 'DllRegisterServer');
  if @RegFunc <> nil then
    Result := RegFunc = S_OK
  else
    Result := False;
  FreeLibrary(OCXHand);
end;

function UnRegisterOCX(FileName: string): Boolean;
var
  OCXHand: THandle;
  RegFunc: TDllRegisterServer;
begin
  OCXHand := LoadLibrary(PChar(FileName));
  RegFunc := GetProcAddress(OCXHand, 'DllUnregisterServer');
  if @RegFunc <> nil then
    Result := RegFunc = S_OK
  else
    Result := False;
  FreeLibrary(OCXHand);
end;

Код 2:

function RegisterServer(const aDllFileName: string; aRegister: Boolean): Boolean;
type
  TRegProc = function: HResult; stdcall;

const
  cRegFuncNameArr: array [Boolean] of PChar =
     ('DllUnregisterServer', 'DllRegisterServer');

var
  vLibHandle: THandle;
  vRegProc: TRegProc;

begin
  Result := False;
  vLibHandle := LoadLibrary(PChar(aDllFileName));
  if vLibHandle = 0 then Exit;
  @vRegProc := GetProcAddress(vLibHandle, cRegFuncNameArr[aRegister]);
  if @vRegProc <> nil then
    Result := vRegProc = S_OK;
  FreeLibrary(vLibHandle);
end;

Оба кода предназначены для регистрации и отмены регистрации OCX/ActiveX-компонентов с помощью функций LoadLibrary и GetProcAddress. Основные отличия:

  • Код 1 использует отдельные функции для регистрации (RegisterOCX) и отмены регистрации (UnRegisterOCX) OCX-компонента.
  • Код 2 предоставляет одиночную функцию RegisterServer, которая принимает булевый параметр, чтобы определить, регистрировать или отменять компонент.

В обоих случаях код пытается загрузить библиотеку OCX с помощью LoadLibrary и получает адрес функции регистрации/отмены регистрации с помощью GetProcAddress. Если функция найдена, она вызывает функцию с ожидаемым результатом (т.е., S_OK) и возвращает булевое значение, указывающее на успех или неудачу.

Рекомендации:

  1. Рассмотрите добавление обработки ошибок для случаев, когда загрузка библиотеки или получение функции fails.
  2. Вам может потребоваться добавление дополнительных проверок возвращаемого значения HResult от функций регистрации/отмены регистрации, чтобы убедиться, что они успешны.
  3. Если вы планируете использовать этот код в производственной среде, рассмотрите реализацию более robust обработки ошибок и механизмов журналирования.

Рассмотрены примеры регистрации и удаления OCX-компонентов с помощью функций RegisterOCX и UnRegisterOCX, а также реализована более универсальная функция RegisterServer для регистрации или.unregistering OCX-компонента.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: ActiveX ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-15 23:39:26/0.0053341388702393/1