Delphi Uygulamasından DLL ve ActiveX Denetimleri

Popüler bir özelliği Delphi bir uygulamanın proje dağıtımıdır. yürütülebilir dosya (exe). Ancak, projenizdeki DLL veya ActiveX denetimleri kullanıcıların makinelerinde kayıtlı değilse, exe dosyasını çalıştırmaya yanıt olarak bir “EOleSysError” görüntülenir. Bunu önlemek için regsvr32.exe komut satırı aracını kullanın.

RegSvr32.exe Komutu

Regsvr32.exe (Windows.) İle el ile kullanma. Başlat - Çalıştır) kendi kendine kaydedilebilir DLL ve ActiveX denetimlerini bir sisteme kaydeder ve kaydını siler. Regsvr32.exe, sisteme bileşeni yüklemeyi ve DLLSelfRegister işlevini çağırmayı dener. Bu deneme başarılı olursa, Regsvr32.exe, başarıyı gösteren bir iletişim kutusu görüntüler.

RegSvr32.exe aşağıdaki komut satırı seçeneklerine sahiptir:

Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] dlladı. / s - Sessiz; mesaj kutusu gösterme. / u - Sunucunun kaydını sil. / i - İsteğe bağlı bir [cmdline] geçirerek DllInstall çağırın; / u ile kullanıldığında dll kaldırma çağırır. / n - DllRegisterServer'ı çağırma; bu seçenek / i ile kullanılmalıdır 
instagram viewer

Aramak Regsvr32.exe'yi Delphi kodu içinde

Delphi kodu içindeki regsvr32 aracını çağırmak için, bir dosyayı yürütmek ve yürütmenin bitmesini beklemek için “RegisterOCX” işlevini kullanın.

'RegisterOCX' prosedürü şöyle görünebilir:

prosedür RegisterOCX; tip
TRegFunc = fonksiyon: HResult; stdcall; var
ARegFunc: TRegFunc; aHandle: Thandle; ocxPath: sicim; başlaDeneyin
ocxPath: = ExtractFilePath (Uygulama. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); Eğer aHandle 0 sonrabaşla
ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); Eğer Atandı (ARegFunc) sonrabaşla
ExecAndWait ('regsvr32', '/ s' + ocxPath); son; FreeLibrary (aHandle); son; dışında
ShowMessage (Biçim ('% s kaydedilemedi', [ocxPath])); son; son;

Not: ocxPath değişkeni 'Flash.ocx' Macromedia OCX'i gösterir.

Kendini kaydedebilmek için, OCX, denetim içindeki tüm sınıflar için kayıt defteri girdileri oluşturmak üzere DllRegisterServer işlevini uygulamalıdır. DllRegisterServer işlevi hakkında endişelenmeyin, sadece orada olduğundan emin olun. Kolaylık olması açısından, OCX'in uygulamanın bulunduğu klasörde bulunduğu varsayılmaktadır.

Yukarıdaki koddaki ExecAndWait satırı, "/ s" anahtarını OCX'e giden tam yolla birlikte geçirerek regsvr32 aracını çağırır. İşlev ExecAndWait'tir.

kullanımları shellapi;... fonksiyon ExecAndWait (const ExecuteFile, ParamString: sicim): boolean; var
SEInfo: TShellExecuteInfo; ExitCode: DWORD; başla
FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); ile SEInfo başla
fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Uygulama. Üstesinden gelmek; lpFile: = PChar (ExecuteFile); lpParametreler: = PChar (ParamString); n Göster: = SW_HIDE; end; Eğer ShellExecuteEx (@SEInfo) sonrabaşlatekrar et
Uygulama. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); a kadar (ExitCode STILL_ACTIVE) veya Uygulama. Sonlandırılmış; Sonuç: = True; sonBaşka Sonuç: Yanlış =; son;

ExecAndWait işlevi, sistemdeki bir dosyayı yürütmek için ShellExecuteEx API çağrısını kullanır. Delphi'den herhangi bir dosyayı yürütmeye ilişkin daha fazla örnek için nasıl yapılacağına bakın Delphi kodundan uygulama ve dosyaları yürütme ve çalıştırma.

Flash.ocx Delphi Exe İçinde

Kullanıcının makinesine bir ActiveX denetimi kaydettirmeniz gerekiyorsa, kullanıcının OCX, programın tüm ActiveX (veya DLL) dosyasını uygulamanın exe'sine kaynak. OCX exe içinde saklandığında, ayıklamak, diske kaydetmek ve RegisterOCX prosedürünü çağırmak kolaydır.