Solución: 1. Uso del instalador para crear un archivo de paquete a menudo aumentará el tamaño del programa en sí.
Hay dos formas de usarlo:
1. Ponga directamente el control Visual ActiveX en el programa;
2. El tiempo de ejecución se establece en tiempo real según sea necesario.
Si se usa directamente, la aplicación buscará y creará automáticamente el control ActiveX requerido durante el proceso de inicialización.
Agregue un nuevo método al formulario del programa:
Unidad Uautoregactivex;
interfaz
usos
Windows, mensajes, sysutils, variantes, clases, gráficos, controles, formularios, diálogos, comobj;
tipo
Tautoregactivexfrm = class (tForm)
procedimiento formulcreate (remitente: tobject);
Privado
{Declaraciones privadas}
público
{Declaraciones públicas}
protegido
{Declaraciones públicas}
procedimiento checkexception (remitente: tobject; eabort: excepción);
fin;
varilla
AutoregactiveXFRM: TautoregactiveXFRM;
Implementación
{$ R *.dfm}
{-------------------------------------------------
En los controles estándar de ActiveX, hay dos funciones DllRregisterServer y DllunRegisterserver que se pueden llamar, donde la función se utiliza para registrar el control y desinstalar el control. Podemos usar LoadLibrary para cargar archivos DLL/OCX, usar GetProcaddress para obtener punteros para DllRegisterserver y DllunRegisterserver, y luego ejecutar estas dos funciones directamente para implementar la operación de registrar y desinstalar controles ActiveX, reemplazando así el sistema de Windows Regsvr32.Exe para implementar ActiveX ActiveX del sistema de Windows. Regístrese y desinstale el control.
-------------------------------------------------- }
{-------------------------------------------------
Descripción del parámetro:
SolefileName un nombre de archivo DLL u OCX;
La oleAction indica el tipo de operación de registro: 1 indica el registro, 0 indica desinstalar
Valor de retorno: Verdadero significa que la operación se ejecuta correctamente, falso significa que la operación se ejecuta falló
-------------------------------------------------- }
function oleregister (SolefileName: String; Oleaaction: Byte): boolean;
estúpido
Registro = 1;
No registerole = 0;
tipo
TOLEREGISTERFUNTION = FUNCIÓN: HRESULT;
varilla
HlibraryHandle: Thandle;
hfunctionAddress: tfarproc;
RegFunction: TOLEGISTERFUNTION;
Comenzar
Resultado: = falso;
// Abra el archivo y devuelva el mango DLL o OCX
HlibraryHandle: = LoadLibrary (pChar (SolefileName));
if (hlibraryHandle> 0) entonces // el mango dllakg ocx es correcto
intentar
// Regresar al puntero de la función de registro o desinstalar
if (oleAction = RegisterOLe) luego // Devuelve el puntero de la función registrada
hfunctionAddress: = getProcAddress (HlibraryHandle, pChar ('' dllRregisterserver ''))
else // Devuelve el puntero de la función de desinstalación
hfunctionAddress: = getProcAddress (hlibraryHandle, pChar ('' dllunRegisterserver ''));
if (hfunctionAddress <> nil) entonces // juzga si existe la función de registro o desinstalación
Comenzar
RegFunction: = TOLEREGISTERFUNTION (HFunctionAddress);
Si regfunction> = 0 entonces // ejecutar la operación de registro o desinstalar, el valor de retorno> = 0 significa que la ejecución es exitosa
/Tresult: = True;
fin;
Finalmente
Freelibrary (HlibraryHandle);
fin;
fin;
{Tautoregactivexfrm}
Procedimiento TautoregactivexfrM.CheckException (remitente: tobject;
EABORT: excepción);
Comenzar
Si Eabort es EolesySerror entonces
Comenzar
if hResult (eolesSeySror (eabort) .ErrorCode) = regdb_e_classnotreg entonces entonces
Oleregister ('' d: /flash.ocx '', 1);
fin
demás
Aplicación.showException (EABORT);
fin;
// Asignar método CheckException a la variable de aplicación del sistema en el evento OnCreate del formulario principal.
Procedimiento TautoregactiveXfrM.FormCreate (remitente: tobject);
varilla
Demoocx: variante;
Comenzar
Application.onexception: = checkException;
// ¿Se genera el error de la cadena de nombre de clase?
intentar
Demoocx: = createOleObject ('' Demo.Demo '');
excepto
En EABORT: eolesySerror do
Si hResult (eabort.errrocode) = co_e_classsstring entonces
Comenzar
Si oleregister ('' d: /flash.ocx '', 1) entonces entonces
/tdemoocx: = createOleObject ('' Demo.Demo '')
demás
Comenzar
/Tapplication.MessageBox('''''Control El registro falló, el programa no se ejecutará normalmente '', pChar ('' Registro Control ''), MB_OK+MB_ICONError);
/TapPlication.merminate;
fin;
fin;
fin;
fin;
fin.