Une caractéristique populaire de Delphes est le déploiement de projet d'une application avec un fichier exécutable (exe). Cependant, si les contrôles DLL ou ActiveX de votre projet ne sont pas enregistrés sur les machines des utilisateurs, une «EOleSysError» s'affichera en réponse à l'exécution du fichier exe. Pour éviter cela, utilisez l'outil de ligne de commande regsvr32.exe.
Commande RegSvr32.exe
Utilisation manuelle de regsvr32.exe (Windows. Démarrer - Exécuter) enregistrera et désinscrira les contrôles DLL et ActiveX auto-enregistrables sur un système. Regsvr32.exe demande au système de tenter de charger le composant et d'appeler sa fonction DLLSelfRegister. Si cette tentative réussit, Regsvr32.exe affiche une boîte de dialogue indiquant la réussite.
RegSvr32.exe dispose des options de ligne de commande suivantes:
Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] nom_dll. / s - Silencieux; n'afficher aucune boîte de message. / u - Annuler l'enregistrement du serveur. / i - Appelez DllInstall en lui passant une [cmdline] facultative; lorsqu'il est utilisé avec / u appelle la désinstallation de la DLL. / n - n'appelle pas DllRegisterServer; cette option doit être utilisée avec / i
Appel RegSvr32.exe Dans le code Delphi
Pour appeler l'outil regsvr32 dans le code Delphi, utilisez la fonction "RegisterOCX" pour exécuter un fichier et attendez la fin de l'exécution.
Voici à quoi pourrait ressembler la procédure «RegisterOCX»:
procédure RegisterOCX; type TRegFunc = une fonction: HResult; stdcall; var ARegFunc: TRegFunc; aManche: THandle; ocxPath: chaîne; commenceressayer ocxPath: = ExtractFilePath (Application. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); si aHandle 0 ensuitecommencer ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); si Attribué (ARegFunc) ensuitecommencer ExecAndWait ('regsvr32', '/ s' + ocxPath); fin; FreeLibrary (aHandle); fin; sauf ShowMessage (Format ('Impossible d'enregistrer% s', [ocxPath])); fin; fin;
Noter la ocxPath La variable pointe vers le Macromedia OCX «Flash.ocx».
Pour pouvoir s'enregistrer, un OCX doit implémenter la fonction DllRegisterServer pour créer des entrées de registre pour toutes les classes à l'intérieur du contrôle. Ne vous inquiétez pas de la fonction DllRegisterServer, assurez-vous simplement qu'elle est là. Par souci de simplicité, il est supposé que l'OCX se trouve dans le même dossier que celui où se trouve l'application.
La ligne ExecAndWait dans le code ci-dessus appelle l'outil regsvr32 en passant le commutateur «/ s» avec le chemin d'accès complet à l'OCX. La fonction est ExecAndWait.
les usages shellapi;... une fonction ExecAndWait (const ExecuteFile, ParamString: chaîne): booléen; var SEInfo: TShellExecuteInfo; ExitCode: DWORD; commencer FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); avec SEInfo commence fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Application. Manipuler; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; eDakota du Nord; si ShellExecuteEx (@SEInfo) ensuitecommencerrépéter Application. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); jusqu'à (ExitCode STILL_ACTIVE) ou Application. Résilié; Résultat: = True; finautre Résultat: = False; fin;
La fonction ExecAndWait utilise l'appel API ShellExecuteEx pour exécuter un fichier sur un système. Pour plus d'exemples d'exécution de n'importe quel fichier à partir de Delphi, découvrez comment exécuter et exécuter des applications et des fichiers à partir du code Delphi.
Flash.ocx dans Delphi Exe
S'il est nécessaire d'enregistrer un contrôle ActiveX sur la machine de l'utilisateur, assurez-vous que l'utilisateur dispose des OCX requis par le programme en plaçant l'intégralité de l'ActiveX (ou DLL) à l'intérieur de l'exe de l'application en tant que Ressource. Lorsque l'OCX est stocké à l'intérieur de l'exe, il est facile d'extraire, de sauvegarder sur le disque et d'appeler la procédure RegisterOCX.