Solution: 1. Utilisation du programme d'installation pour créer un fichier de package augmentera souvent la taille du programme lui-même.
Il existe deux façons de l'utiliser:
1. Mettez directement le contrôle Visual ActiveX dans le programme;
2. L'exécution est établie en temps réel au besoin.
S'il est utilisé directement, l'application recherche automatiquement et créera le contrôle ActiveX requis pendant le processus d'initialisation.
Ajoutez une nouvelle méthode au formulaire de programme:
unité uautoregactivex;
interface
usages
Windows, messages, systèmes, variantes, classes, graphiques, commandes, formulaires, dialogues, comobj;
taper
Tautoregactivexfrm = classe (tform)
Procédure FormCreate (expéditeur: tobject);
Privé
{Déclarations privées}
publique
{Déclarations publiques}
protégé
{Déclarations publiques}
Procédure CheckException (expéditeur: tobject; eabort: exception);
fin;
var
Autoregactivexfrm: tautoregactivexfrm;
Mise en œuvre
{$ R * .dfm}
{-------------------------------------------------
Dans les contrôles ActiveX standard, il existe deux fonctions DLREGISTERSERVERS ET DLLUNREGISTERSERVER qui peuvent être appelées, où la fonction est utilisée pour enregistrer le contrôle et désinstaller le contrôle. Nous pouvons utiliser LoadLibrary pour charger les fichiers DLL / OCX, utiliser GetProcaddress pour obtenir des pointeurs vers Dllregisterserver et DLlunRegISTerServer, puis exécuter ces deux fonctions directement pour implémenter le fonctionnement de RegSVR32.Exe du système Windows, en remplaçant ainsi ainsi le système Windows System Windows pour implémenter ActiveX Enregistrez et désinstallez le contrôle.
-------------------------------------------------- }
{-------------------------------------------------
Description du paramètre:
SoleFileName un nom de fichier DLL ou OCX;
L'oléonction indique le type d'opération d'enregistrement: 1 indique l'enregistrement, 0 indique une désinstallation
Valeur de retour: vrai signifie que l'opération est exécutée avec succès, faux signifie que l'opération est exécutée échoué
-------------------------------------------------- }
fonction oleregister (soleFileName: String; OleAction: octet): booléen;
const
Registerole = 1;
Non-inscripteur = 0;
taper
ToleRegisterFunction = Fonction: HRESULT;
var
HlibraryHandle: Thandle;
HfonctionAddress: tfarProc;
RegFunction: ToleRegisterFunction;
Commencer
Résultat: = false;
// Ouvrez le fichier et renvoyez la poignée DLL ou OCX
hlibraryhandle: = loadLibrary (pChar (soleFileName));
if (hlibraryhandle> 0) alors // la poignée Dllakg OCX est correcte
essayer
// retour au pointeur d'enregistrement ou de désinstallation
if (oleAction = regrinsole) alors // renvoie le pointeur de fonction enregistré
hfunctionAddress: = getProcAddress (hlibraryhandle, phar ('' dllregisterserver ''))
else // renvoie le pointeur de fonction de désinstallation
HFunctionAddress: = GetProcAddress (hlibraryhandle, phar ('' dllungisterserver ''));
if (hfonctionaddress <> nil) alors // juge si la fonction d'enregistrement ou de désinstallation existe
Commencer
RegFunction: = ToleRegisterFunction (HFonctionAddress);
Si RegFunction> = 0 alors // Exécuter l'opération d'enregistrement ou de désinstallation, la valeur de retour> = 0 signifie que l'exécution est réussie
/ tresult: = true;
fin;
Enfin
FreeLibrary (HlibraryHandle);
fin;
fin;
{Tautoregactivexfrm}
Procédure tautoregactivexfrm.checkexception (expéditeur: tobject;
EABORT: Exception);
Commencer
Si Eabort est eolesyserror, alors
Commencer
Si HRESULT (EOLESYSERROR (EABORT) .ERRORCODE) = REGDB_E_CLASSNOTreg alors
Olegister ('' d: /flash.ocx '', 1);
fin
autre
Application.showException (EABORT);
fin;
// Attribuez une méthode CheckException à la variable d'application système dans l'événement OnCreate du formulaire principal.
procédure tautoregactivexfrm.formCreate (expéditeur: tobject);
var
Demoocx: variante;
Commencer
Application.Oxception: = CheckException;
// L'erreur de chaîne de nom de classe est-elle générée?
essayer
DemoOCX: = CreateoMObject ('' Demo.demo '');
sauf
sur Eabort: eolesyserror do
Si HRESULT (EABORT.ERRORCODE) = CO_E_CLASSSSTRING alors
Commencer
Si Olegister ('' d: /flash.ocx '', 1) alors
/ tdemoocx: = CreateoMObject ('' Demo.demo '')
autre
Commencer
/Tapplication.MessageBox('''Control Enregistrement a échoué, le programme ne s'exécutera pas normalement '', phar ('' registre Control ''), MB_OK + MB_ICONERROR);
/tapplication.terminiate;
fin;
fin;
fin;
fin;
fin.