Registra i controlli DLL e ActiveX da un'applicazione Delphi

Una caratteristica popolare di Delphi è la distribuzione del progetto di un'applicazione con un file eseguibile (exe). Tuttavia, se i controlli DLL o ActiveX nel progetto non sono registrati sui computer degli utenti, verrà visualizzato un "EOleSysError" in risposta all'esecuzione del file exe. Per evitare ciò, utilizzare lo strumento da riga di comando regsvr32.exe.

Comando RegSvr32.exe

L'uso manuale di regsvr32.exe (Windows.Start - Esegui) registra e annulla la registrazione dei controlli DLL e ActiveX autoregistranti su un sistema. Regsvr32.exe indica al sistema di tentare di caricare il componente e di chiamare la sua funzione DLLSelfRegister. Se questo tentativo ha esito positivo, Regsvr32.exe visualizza una finestra di dialogo che indica l'esito positivo.

RegSvr32.exe ha le seguenti opzioni della riga di comando: 

Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] dllname / s - Silenzioso; visualizza nessuna finestra di messaggio / u - Annulla la registrazione del server / i - Chiama DllInstall passandogli un facoltativo [cmdline]; se usato con / u chiama dll uninstall / n - non chiama DllRegisterServer; questa opzione deve essere utilizzata con / i 

Chiamata RegSvr32.exe All'interno del codice Delphi

Per chiamare lo strumento regsvr32 nel codice Delphi, utilizzare la funzione "RegisterOCX" per eseguire un file e attendere il completamento dell'esecuzione.

Ecco come potrebbe apparire la procedura "RegisterOCX":

procedura RegisterOCX; genere TRegFunc = funzione : HResult; stdcall; var ARegFunc: TRegFunc; aHandle: THandle; ocxPath: corda; inizio provare ocxPath: = ExtractFilePath (Application.ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); Se aHandle 0 poi inizio ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); Se Assegnato (ARegFunc) poi inizio ExecAndWait ('regsvr32', '/ s' + ocxPath); fine; FreeLibrary (aHandle); fine; tranne ShowMessage (Format ('Impossibile registrare% s', [ocxPath])); fine; fine;

Notare la ocxPath punta a "Flash.ocx" Macromedia OCX.

Per poter registrarsi, un OCX deve implementare la funzione DllRegisterServer per creare voci di registro per tutte le classi all'interno del controllo. Non preoccuparti della funzione DllRegisterServer, assicurati solo che sia lì. Per semplicità, si presume che OCX si trovi nella stessa cartella in cui si trova l'applicazione.

La riga ExecAndWait nel codice precedente chiama lo strumento regsvr32 passando l'opzione "/ s" insieme al percorso completo verso OCX. La funzione è ExecAndWait.

usi shellapi; ... funzione ExecAndWait (const ExecuteFile, ParamString: corda): booleano; var SEInfo: TShellExecuteInfo; ExitCode: DWORD; inizio FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); con SEInfo iniziare fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Application.Handle; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; eND; Se ShellExecuteEx (@SEInfo) poi inizio ripetere Application.ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); fino a (ExitCode STILL_ACTIVE) o Application.Terminated; Risultato: = true; fine altro Risultato: = false; fine;

La funzione ExecAndWait utilizza la chiamata API ShellExecuteEx per eseguire un file su un sistema. Per altri esempi di esecuzione di qualsiasi file da Delphi, scopri come eseguire ed eseguire applicazioni e file dal codice Delphi.

Flash.ocx Inside Delphi Exe

Se è necessario registrare un controllo ActiveX sul computer dell'utente, assicurarsi che l'utente disponga dell'OCX richiesto dal programma posizionando l'intero ActiveX (o DLL) all'interno dell'exe dell'applicazione come risorsa. Quando l'OCX è archiviato all'interno di exe, è facile estrarlo, salvarlo su disco e chiamare la procedura RegisterOCX.