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
Usando manualmente regsvr32.exe (Windows. Inicio - Ejecutar) registrará y anulará 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 es exitoso, 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 el registro del servidor. / i - Llama a DllInstall pasándole un [cmdline] opcional; cuando se usa con / u llama a la desinstalación de dll. / 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; empezartratar ocxPath: = ExtractFilePath (Aplicación. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); Si aHandle 0 luegoempezar ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); Si Asignado (ARegFunc) luegoempezar ExecAndWait ('regsvr32', '/ s' + ocxPath); final; FreeLibrary (aHandle); final; excepto ShowMessage (Formato ('No se puede registrar% s', [ocxPath])); final; final;
Nota la ocxPath puntos variables a la '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: = Aplicación. Encargarse de; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; miDakota del Norte; Si ShellExecuteEx (@SEInfo) luegoempezarrepetir Solicitud. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); hasta (ExitCode STILL_ACTIVE) o Aplicación. Terminado; Resultado: = Verdadero; finalmá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 de 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 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.