Kontrol DLL dan ActiveX Dari Aplikasi Delphi

Fitur populer dari Delphi adalah penyebaran proyek aplikasi dengan file yang dapat dieksekusi (exe). Namun, jika kontrol DLL atau ActiveX dalam proyek Anda tidak terdaftar pada mesin pengguna, "EOleSysError" akan ditampilkan sebagai tanggapan untuk menjalankan file exe. Untuk menghindari ini, gunakan alat baris perintah regsvr32.exe.

Perintah RegSvr32.exe

Secara manual menggunakan regsvr32.exe (Windows. Start - Run) akan mendaftar dan membatalkan registrasi kontrol DLL dan ActiveX yang dapat didaftarkan sendiri pada suatu sistem. Regsvr32.exe menginstruksikan sistem untuk mencoba memuat komponen dan memanggil fungsi DLLSelfRegister. Jika upaya ini berhasil, Regsvr32.exe menampilkan dialog yang menunjukkan keberhasilan.

RegSvr32.exe memiliki opsi baris perintah berikut:

Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] dllname. / s - Diam; tidak menampilkan kotak pesan. / u - Batalkan pendaftaran server. / i - Panggil DllInstall dengan memberinya [cmdline] opsional; ketika digunakan dengan / u panggilan dll uninstall. / n - jangan panggil DllRegisterServer; opsi ini harus digunakan dengan / i 
instagram viewer

Panggilan RegSvr32.exe Dalam kode Delphi

Untuk memanggil alat regsvr32 dalam kode Delphi, gunakan fungsi "RegisterOCX" untuk mengeksekusi file dan menunggu eksekusi selesai.

Beginilah tampilan prosedur 'RegisterOCX':

prosedur RegisterOCX; Tipe
TRegFunc = fungsi: HResult; stdcall; var
ARegFunc: TRegFunc; aHandle: THandle; ocxPath: tali; mulaimencoba
ocxPath: = ExtractFilePath (Aplikasi. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); jika aHandle 0 kemudianmulai
ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); jika Ditugaskan (ARegFunc) kemudianmulai
ExecAndWait ('regsvr32', '/ s' + ocxPath); akhir; FreeLibrary (aHandle); akhir; kecuali
ShowMessage (Format ('Tidak dapat mendaftar% s', [ocxPath])); akhir; akhir;

Catatan: ocxPath variabel menunjuk ke 'Flash.ocx' Macromedia OCX.

Agar dapat mendaftar sendiri, OCX harus mengimplementasikan fungsi DllRegisterServer untuk membuat entri registri untuk semua kelas di dalam kontrol. Jangan khawatir tentang fungsi DllRegisterServer, pastikan saja itu ada. Demi kesederhanaan, dianggap bahwa OCX terletak di folder yang sama dengan tempat aplikasi tersebut.

Baris ExecAndWait dalam kode di atas memanggil alat regsvr32 dengan melewatkan tombol "/ s" bersama dengan path lengkap ke OCX. Fungsinya adalah ExecAndWait.

menggunakan shellapi;... fungsi ExecAndWait (const ExecuteFile, ParamString: tali): boolean; var
SEInfo: TShellExecuteInfo; ExitCode: DWORD; mulai
FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); dengan SEInfo mulai
fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Aplikasi. Menangani; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nTampilkan: = SW_HIDE; end; jika ShellExecuteEx (@SEInfo) kemudianmulaiulang
Aplikasi. Pesan Proses; GetExitCodeProcess (SEInfo.hProcess, ExitCode); sampai (ExitCode STILL_ACTIVE) atau Aplikasi. Dihentikan; Hasil: = Benar; akhirlain Hasil: = Salah; akhir;

Fungsi ExecAndWait menggunakan panggilan API ShellExecuteEx untuk mengeksekusi file pada sistem. Untuk lebih banyak contoh mengeksekusi file apa pun dari Delphi, lihat caranya jalankan dan jalankan aplikasi dan file dari kode Delphi.

Flash.ocx Di dalam Delphi Exe

Jika ada kebutuhan untuk mendaftarkan kontrol ActiveX pada mesin pengguna, maka pastikan pengguna memiliki OCX program mengharuskan dengan menempatkan seluruh ActiveX (atau DLL) di dalam exe aplikasi sebagai a sumber. Ketika OCX disimpan di dalam exe, mudah untuk mengekstrak, menyimpan ke disk, dan memanggil prosedur RegisterOCX.

instagram story viewer