Lösung: Die Verwendung des Installationsprogramms zum Erstellen einer Paketdatei erhöht häufig die Größe des Programms selbst.
Es gibt zwei Möglichkeiten, es zu verwenden:
1. Stecken Sie das Visual ActiveX -Steuerelement direkt in das Programm;
2. Die Laufzeit wird nach Bedarf in Echtzeit festgelegt.
Wenn es direkt verwendet wird, sucht die Anwendung automatisch die erforderliche ActiveX -Steuerung während des Initialisierungsprozesses.
Fügen Sie dem Programmformular eine neue Methode hinzu:
Einheit UAutoregactiveX;
Schnittstelle
Verwendung
Windows, Nachrichten, Systeme, Varianten, Klassen, Grafiken, Steuerelemente, Formulare, Dialoge, Comobj;
Typ
TautoregactiveXfrm = Klasse (tform)
Prozedur Formcreate (Absender: Tobject);
Privat
{Private Deklarationen}
öffentlich
{Öffentliche Erklärungen}
geschützt
{Öffentliche Erklärungen}
Procedure Checkkexception (Absender: Tobject; Eabort: Ausnahme);
Ende;
var
AutoregactiveXFRM: TautoregactiveXFRM;
Durchführung
{$ R *.dfm}
{---------------------------------------------
Bei Standard -ActiveX -Steuerelementen gibt es zwei Funktionen, die Dllregiererver und dllunregiererver aufgerufen werden können, wobei die Funktion zum Register der Steuerung und der Deinstallation des Steuerelements verwendet wird. Wir können Loadlibrary verwenden, um DLL/OCX -Dateien zu laden, GetProcaddress zu verwenden, um Zeiger auf Dllregiererver und DllunregeterServer zu erhalten, und diese beiden Funktionen dann direkt ausführen Registrieren Sie die Steuerung und deinstallieren Sie die Kontrolle.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- }
{---------------------------------------------
Parameterbeschreibung:
SOLEFILENAME A DLL- oder OCX -Dateiname;
Oleaction gibt den Registrierungsbetriebstyp an: 1 Zeigt die Registrierung an.
Rückgabewert: True bedeutet, dass die Operation erfolgreich ausgeführt wird. Falsch bedeutet, dass der Operation ausgeführt wird
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- }
Funktion oleregister (alleinerziehender Name: String; Oleaction: Byte): boolean;
Const
Registerol = 1; // Register
Unregisterole = 0;
Typ
ToleregisterFunction = Funktion: hResult;
var
HlibraryHandle: Thandle;
HfunctionAddress: TFARPROC;
Regfunktion: ToleregisterFunction;
Beginnen
Ergebnis: = falsch;
// Öffnen Sie die Datei und geben Sie das DLL- oder OCX -Handle zurück
hlibraryHandle: = loadlibrary (pChar (SolFileName));
if (hlibraryHandle> 0), dann ist // dllakg OCX -Handle korrekt
versuchen
// kehren Sie zur Registrierung oder Deinstallation des Funktionszeigers zurück
if (leaction = Registerol) dann // den registrierten Funktion Zeiger zurückgeben
HfunctionAddress: = GetProcaddress (hlibraryHandle, pchar ('' dllregiererver ''))
sonst // Geben Sie den Deinstallationsfunktionszeiger zurück
hfunctionAddress: = GetProcaddress (hlibraryHandle, pChar ('' dllunregiererver ''));
if (hfunctionAddress <> nil), dann beurteilen Sie, ob die Registrierung oder die Deinstallation existiert
Beginnen
Regfunktion: = ToleregisterFunction (hFunctionAddress);
Wenn Regfunktion> = 0 dann // die Registrierung oder Deinstallation durchführen, bedeutet der Rückgabewert> = 0, dass die Ausführung erfolgreich ist
/Tresult: = wahr;
Ende;
Endlich
Freelibrary (HlibraryHandle);
Ende;
Ende;
{TautoregactiveXfrm}
Prozedur TautoregactiveXfrm.Checkexception (Absender: Tobject;
Eabort: Ausnahme);
Beginnen
Wenn Eabort EoleSySror ist, dann
Beginnen
Wenn hResult (EoleSySror (eAbort) .ErrorCode) = Regdb_e_classnotreg dann dann
Oleregister ('' d: /flash.ocx '', 1);
Ende
anders
Application.ShowException (eabort);
Ende;
// Überprüfungsmethode der Systemanwendungsvariable im OnCreate -Ereignis des Hauptformulars zuweisen.
Prozedur TautoregactiveXFr.FormCreate (Absender: Tobject);
var
Demoocx: Variante;
Beginnen
Application.Onexception: = scheckkexception;
// wird der Klassenname -Zeichenfolgenfehler generiert?
versuchen
Demoocx: = CreateLoBject ('' Demo.demo '');
außer
auf eabort: eoleSySror do
Wenn HResult (EABORT.ErrorCode) = co_e_classsString, dann dann
Beginnen
Wenn Oeregister ('' d: /flash.ocx '' ', 1) dann
/TDEMOOCX: = CREATEOLOBJECT ('' Demo.demo '')
anders
Beginnen
/Tapplication.MessageBox(''Control -Registrierung fehlgeschlagen, das Programm wird nicht normal ausgeführt.
/tapplication.terate;
Ende;
Ende;
Ende;
Ende;
Ende.