Registre los controles DLL y ActiveX desde una aplicación Delphi

Una característica popular de Delphi es la implementación del proyecto de una aplicación con un archivo ejecutable (exe). Sin embargo, si los controles DLL o ActiveX en su proyecto no están registrados en las máquinas de los usuarios, se mostrará un "EOleSysError" en respuesta a la ejecución del archivo exe. Para evitar esto, use la herramienta de línea de comandos regsvr32.exe.

Comando RegSvr32.exe

El uso manual de regsvr32.exe (Windows.Start - Run) registrará y anulará el registro de los controles DLL y ActiveX autorregistrables en un sistema. Regsvr32.exe indica al sistema que intente cargar el componente y llamar a su función DLLSelfRegister. Si este intento tiene éxito, Regsvr32.exe muestra un cuadro de diálogo que indica éxito.

RegSvr32.exe tiene las siguientes opciones de línea de comandos: 

Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] dllname / s - Silencioso; no mostrar cuadros de mensaje / u - Anular registro del servidor / i - Llamar a DllInstall pasándole un [cmdline] opcional; cuando se usa con / u llama a dll uninstall / n - no llame a DllRegisterServer; esta opción debe usarse con / i 

Llamada RegSvr32.exe Dentro del código de Delphi

Para llamar a la herramienta regsvr32 dentro del código Delphi, use la función "RegisterOCX" para ejecutar un archivo y espere a que termine la ejecución.

Así es como podría verse el procedimiento 'RegisterOCX':

procedimiento RegisterOCX; tipo TRegFunc = función : HResult; stdcall; var ARegFunc: TRegFunc; aHandle: THandle; ocxPath: cuerda; empezar tratar ocxPath: = ExtractFilePath (Application.ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); Si aHandle 0 luego empezar ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); Si Asignado (ARegFunc) luego empezar ExecAndWait ('regsvr32', '/ s' + ocxPath); final; FreeLibrary (aHandle); final; excepto ShowMessage (Formato ('No se puede registrar% s', [ocxPath])); final; final;

Nota la ocxPath puntos variables al 'Flash.ocx' Macromedia OCX.

Para poder registrarse, un OCX debe implementar la función DllRegisterServer para crear entradas de registro para todas las clases dentro del control. No se preocupe por la función DllRegisterServer, solo asegúrese de que esté allí. En aras de la simplicidad, se presume que el OCX se encuentra en la misma carpeta donde se encuentra la aplicación.

La línea ExecAndWait en el código anterior llama a la herramienta regsvr32 pasando el modificador "/ s" junto con la ruta completa al OCX. La función es ExecAndWait..

usos shellapi; ... función ExecAndWait (const ExecuteFile, ParamString: cuerda): booleano; var SEInfo: TShellExecuteInfo; ExitCode: DWORD; empezar FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); con SEInfo empieza fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Application.Handle; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; miDakota del Norte; Si ShellExecuteEx (@SEInfo) luego empezar repetir Application.ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); hasta (ExitCode STILL_ACTIVE) o Application.Terminated; Resultado: = Verdadero; final más Resultado: = falso; final;

La función ExecAndWait usa la llamada API ShellExecuteEx para ejecutar un archivo en un sistema. Para obtener más ejemplos de ejecución de cualquier archivo desde Delphi, consulte cómo ejecutar y ejecutar aplicaciones y archivos desde el código de Delphi.

Flash.ocx Inside Delphi Exe

Si es necesario registrar un control ActiveX en la máquina del usuario, asegúrese de que el usuario tenga el OCX que requiere el programa colocando todo el ActiveX (o DLL) dentro del exe de la aplicación como recurso. Cuando el OCX se almacena dentro del exe, es fácil de extraer, guardar en el disco y llamar al procedimiento RegisterOCX.