J'ai trouvé un moyen d'éviter les DLL et utiliser quand-même des routines écrites en Delphi !
J'ai tout simplement réalisé un serveur écrit en Delphi contenant toutes les routines que je veux mettre à disposition d'un programme Panoramic. Ce serveur que j'ai appelé ServerIPC, est lancé par un programme Panoramic qui le contrôle par la suite. Ces deux programmes communiquent par la technologie IPC que j'ai mise au point pour la communication entre deux programmes Panoramic (KGF.dll ou IPC.dll). Le programme Panoramic envoie des commandes au serveur qui les exécute et renvoie soit un message de confirmation, soit des données.
J'ai mis en ligne une première version opérationnelle. La distribution comprend 3 fichiers:
ServerIPC.exe - c'est le serveur réalisé en Delphi
Test ServerIPC.bas - source d'un programme de démonstration
Test ServerIPC.exe - version exécutable du programme de démonstration
Il suffit de copier ces trois fichiers dans un même répertoire. On lance "Test ServerIPC.exe" qui de son côté lance immédiatement le serveur et établit la communication. Le serveur affiche une fenêtre à l'écran dans laquelle un mémo montre la trace des messages reçus et envoyés.
Le programme de démo contient des sélecteurs pour choisir une des commandes implémentées à ce jour. Il y a deux groupes de commandes: des commandes de gestion et des commandes application. Les commandes de gestion permettent de gérer le fonctionnement du serveur, et les commandes d'application appellent les vraies fonctions Delphi.
Pour cette première version, j'ai mis à disposition la fonctionnalité du programme NomCourt.exe que j'avais mis en ligne récemment - on peut l'utiliser maintenant dans un programme Panoramic en ligne, SANS avoir à faire des commandes manuelles. Certes, le programme de démonstration appelle open_dialog pour sélectionner le fichier dont on veut obtenir le nom court. Mais on peut parfaitement courcircuiter cela (c'est juste du code Panoramic dans le programme de démonstration) et mettre un nom de fichier sous forme de string ou de variable. Et on obtient le nom court instantanément, dans le programme Panoramic qui a lancé la demande.
Et j'ai mis aussi la fonction GetVolumeList extraite de la DLL GVL.dll. En valeur de retour, on obtient un petit message en clair indiquant que le résultat est chargé dans le presse-papier, et il suffit de l'utiliser, soit par control-V, soit par la fonction clipboard_string_paste$ ou la commande clipboard_string_paste.
D'autres fonctions extraites de mes DLLs suivront.
La distribution se trouve sur mon site, rubrique "Externes", dernière ligne !