Solusi: 1. Menggunakan penginstal untuk membuat file paket akan sering meningkatkan ukuran program itu sendiri.
Ada dua cara untuk menggunakannya:
1. Langsung masukkan kontrol Visual ActiveX ke dalam program;
2. Runtime ditetapkan secara real time sesuai kebutuhan.
Jika digunakan secara langsung, aplikasi akan secara otomatis mencari dan membuat kontrol ActiveX yang diperlukan selama proses inisialisasi.
Tambahkan metode baru ke formulir program:
unit uautoregactivex;
antarmuka
penggunaan
Windows, pesan, sysutils, varian, kelas, grafik, kontrol, formulir, dialog, comobj;
jenis
Tautoregactivexfrm = class (tform)
Prosedur FormCreate (pengirim: Tobject);
Pribadi
{Deklarasi Pribadi}
publik
{Deklarasi Publik}
terlindung
{Deklarasi Publik}
Prosedur CheckException (pengirim: TOBJEK; EABORT: Exception);
akhir;
var
Autoregactivexfrm: tautoregactivexfrm;
Pelaksanaan
{$ R *.dfm}
{-------------------------------------------------
Dalam kontrol ActiveX standar, ada dua fungsi DllregisterServer dan DllunregisterServer yang dapat dipanggil, di mana fungsi digunakan untuk mendaftarkan kontrol dan menghapus instalasi kontrol. We can use LoadLibrary to load DLL/OCX files, use GetProcAddress to get pointers to DLLRegisterServer and DLLUnRegisterServer, and then run these two functions directly to implement the operation of registering and uninstalling ActiveX controls, thereby replacing the Windows system's RegSvr32.exe to implement ActiveX Daftar dan hapus instalan kontrol.
-------------------------------------------------- }
{-------------------------------------------------
Deskripsi Parameter:
nama solefilen nama file DLL atau OCX;
Oleaksi menunjukkan jenis operasi pendaftaran: 1 menunjukkan pendaftaran, 0 menunjukkan uninstall
Nilai pengembalian: Benar berarti operasi dieksekusi dengan sukses, salah berarti operasi dieksekusi gagal
-------------------------------------------------- }
fungsi oleregister (SolefileName: String; Oleaksi: byte): boolean;
const
Registerole = 1;
Unregisterole = 0; // uninstall
jenis
Toleregisterfunction = Fungsi: hResult;
var
Hlibraryhandle: Thandle;
hfunctionAddress: tfarproc;
Fungsi: Toleregisterfunction;
Mulai
Hasil: = false;
// Buka file dan kembalikan pegangan DLL atau OCX
hlibraryhandle: = loadLibrary (pchar (solefileName));
if (hlibraryhandle> 0) lalu // pegangan ocx dllakg benar
mencoba
// Kembali ke pendaftaran atau uninstall function pointer
if (oleaction = registerole) lalu // kembalikan penunjuk fungsi terdaftar
hfunctionAddress: = getProcaddress (hlibraryhandle, pchar ('' dllregisterserver '')))
else // kembalikan penunjuk fungsi uninstall
hfunctionAddress: = getProcaddress (hlibraryhandle, pchar ('' DllunregisterServer ''));
if (hfunctionAddress <> nil) lalu // menilai apakah ada pendaftaran atau fungsi penghapusan
Mulai
Regfunction: = Toleregisterfunction (hfunctionAddress);
Jika Regfunction> = 0 lalu // Jalankan operasi pendaftaran atau uninstall, nilai pengembalian> = 0 berarti eksekusi berhasil
/tresult: = true;
akhir;
Akhirnya
Freelibrary (hlibraryhandle);
akhir;
akhir;
{Tautoregactivexfrm}
Prosedur tautoregactivexfrM.Checkexception (pengirim: TOBJEK;
Eabort: Pengecualian);
Mulai
Jika Eabort adalah eolesyserror maka
Mulai
jika hResult (eolesyserror (eabort) .ErrorCode) = regdb_e_classnotreg
Oleregister ('' d: /flash.ocx '', 1);
akhir
kalau tidak
Application.ShowException (EABORT);
akhir;
// Tetapkan metode CheckException ke variabel aplikasi sistem dalam peristiwa onCreate dari formulir utama.
Prosedur tautoregactivexfrM.FormCreate (pengirim: tobject);
var
Demoocx: varian; // Deklarasi Variabel
Mulai
Application.onexception: = CheckException;
// Apakah kesalahan string nama kelas dihasilkan?
mencoba
Demoocx: = createOleBject ('' Demo.demo '');
kecuali
Di Eabort: Eolesyserror lakukan
jika hResult (eabort.errorcode) = co_e_classsstring
Mulai
jika oleregister ('' d: /flash.ocx '', 1) lalu
/tdemoocx: = createOleObject ('' demo.demo '')
kalau tidak
Mulai
/plication.messageBox(''Control Registrasi gagal, program tidak akan berjalan secara normal '', pchar ('' Control Register ''), MB_OK+MB_ICONERROR);
/plikasi.
akhir;
akhir;
akhir;
akhir;
akhir.