Communications interapplications sous Windows

 

Miko le 28/10/2006

Il peut être nécessaire de transmettre des données entre deux applications écrites avec des langages différents sous Windows. Plusieurs mécanismes existent à cet effet. J'ai choisi d'utiliser les fonctions API, principalement parceque j'avais déjà effectué une partie du travail avec Delphi. L'objet de cette page est de tenter d'expliquer comment on peut s'y prendre avec Tcl... et C. Concernant C, c'est la première fois que je dépasse "Hello World" donc c'est pour moi un grand bond en avant.

Pour cet exemple, j'ai utilisé Delphi 7, Tcl 8.4.13, Dev C++ 4.9.9.2 (gcc)

La doc qui m'a été utile: tout d'abord (merci Stéphane)Écrire une librairie dynamique chargeable dans l'interpréteur Tcl/Tk, la doc MSDN de l'API Windows et comme toujours le wiki anglophone.

Twapi ne met pas à disposition la fonction SendMessage, winapi de son côté ne fournit pas d'interface à GlobalAddAtom, donc pour utiliser les messages Windows, il ne me restait que l'écriture d'une dll spécifique. Le résultat est un package que vous pouvez récupérer ici: http://michel.salvagniac.free.fr/upload/passechaine.zip Le paquet contient le source C de la dll, je ne le publie donc pas ici, les curieux peuvent toujours me contacter pour plus d'explications, si nécessaire.

package require passechaine

vous donne accès aux trois fonctions suivantes:

registreMessage. Attend en argument une chaîne qui sera utiliser pour identifier de manière unique le message partagé entre les deux apllications. L'application qui utilise le message doit appeler la fonction API RegisterWindowMessage avec la même chaîne en argument. Ne doit être appelée qu'une fois, au début du programme.

passeVariables. Attend en argument 1 le titre de la fenêtre cible, en argument 2 la chaine de caractères (limitée à 255...) à transmettre.

Nettoie. Pas d'argument. Libère les ressources en fin d'exécution.

Le but de ce travail est de contrôler une appli Delphi qui affiche des images par le biais d'une interface Tcl/Tk qui référence des pièces de dossiers dans une base de données PostgreSQL, en fait un système GED. Si l'appli de visualisation n'est pas lancée, on l'ouvre avec exec, sinon, on lui transmet le chemin de l'image à afficher.

Vous pouvez adapter ce package (Licence NOL) à tout usage vous convenant.