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
Utilizzo manuale di regsvr32.exe (Windows. Start - Esegui) registrerà e annullerà 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; non visualizzare finestre di messaggio. / u - Annulla la registrazione del server. / i - Chiama DllInstall passandogli un facoltativo [cmdline]; se usato con / u chiama disinstallazione dll. / n - non chiamare DllRegisterServer; questa opzione deve essere utilizzata con / i
Chiamata RegSvr32.exe All'interno del codice Delphi
Per chiamare lo strumento regsvr32 all'interno del 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; inizioprovare ocxPath: = ExtractFilePath (Applicazione. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); Se aHandle 0 poiinizio ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); Se Assegnato (ARegFunc) poiinizio 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: = Applicazione. Maniglia; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; eND; Se ShellExecuteEx (@SEInfo) poiinizioripetere Applicazione. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); fino a (ExitCode STILL_ACTIVE) o Applicazione. terminato; Risultato: = true; finealtro 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 del OCX richiesto dal programma inserendo l'intero ActiveX (o DLL) all'interno dell'exe dell'applicazione come a risorsa. Quando l'OCX è archiviato all'interno di exe, è facile estrarlo, salvarlo su disco e chiamare la procedura RegisterOCX.