Appel d'une meme dll par 2 softs differents, pour echange une donnée - Delphi/Pascal - Programmation
Marsh Posté le 26-05-2003 à 18:31:42
Van_axl a écrit : Bon voila, j'ai 2 softs qui ne sont pas parogrammé dans le meme langage (delphi et labview en l'occurence). Je veut créer une dll qui puisse faire passer des données de l'un a l'autre. Elle serait donc appeler par les 2 softs. |
l'ecrire dans un fichier texte ?
La faire passer entre les deux appli par un message windows ?
Marsh Posté le 26-05-2003 à 19:09:57
ouai mais il faudrait qu'elle permette de"synchroniser" les 2 softs. en gros : 1 envoie une donnée à 2, et deux en lisant dit OK j'ai lu tu peux continuer. C'est ca l'idée en fait .
pour le message windows, est-ce possible apres que les données soient utilisées ? Car en fait ce sont des valeurs qu'il faudrait transmettre du soft 1 au soft 2.
L'idée du fichier texte n'est pas forcément interessante car il faudrait que l'un ouvre le fichier, puis ecrive, puis le ferme. Pendant que le second essayer aussi de l'ouvrir, puis de le lire, puis de le fermer!!
Marsh Posté le 26-05-2003 à 20:08:52
Tu peux t'arranger pour communiquer via DDE : si le serveur DDE (la DLL) n'existe pas, tu le lance, sinon bah tu te connectes dessus.
Je peux pas te donner bcp plus d'infos malheureusement, mais je pense que ça pourrait t'aider dans ton cas... (si tu as accès au DEE depuis labview évidemment, sinon il faudra encore une DLL intermédiaire )
Marsh Posté le 27-05-2003 à 10:25:33
Bon pour le DDE, je ne connais pas du tout donc je sais pas si ca peux faire ce que je veux (mais ca a l'air qd meme lourd a programmer).
Par contre on m'a parler de l'utilisation de socket.
Vous en penser quoi ?
Si vous avez d'autre soluce je suis toujours prenneur.
Marsh Posté le 27-05-2003 à 10:41:43
On me parle aussi de FIFO, mais c'est presque du chinois pour moi.
Marsh Posté le 27-05-2003 à 11:20:17
Je suis pas sûr que jouer avec des sockets soit plus facile que le DDE... Enfin que ce soit l'un ou l'autre y a des encapsulations dans Delphi pour que ce soit plus facile à utiliser je pense.
Marsh Posté le 27-05-2003 à 11:37:45
le mieux est encore que tu ailles voir dans la MSDN ce que Windows propose comme systèmes de communication entre les processus : http://msdn.microsoft.com/library/ [...] ations.asp
Marsh Posté le 27-05-2003 à 11:59:26
J ai deja reussi a faire marcer une DLL appele par trois programme a la fois et sans probleme (Appel Dynamique ) . Donc en e qui concerne l appel a la DLL je ne pense pas qu il y est de probleme. Maintenant comme synchro les 2 process... Aucune idee .
@->--
Marsh Posté le 27-05-2003 à 12:06:48
Mais , dans tes 3 applis , tu pouvais faire passer des infos via cette dll ! car sinon moi de mon coté la dll est bien chargé par mes 2 softs.
Marsh Posté le 27-05-2003 à 14:20:45
Bon, j'en etais rester sur ses soluces :
- message windows mais labview ne gere pas torp ca.
- socket mais ce que j'arrive a faire pour l'instant c'est qu'une connexion socket client serveur dans labview (ca marche). En delphi j'ai aussi fait 2 applis clients serveur aui marchent aussi , ils se parle. Mais pour fair parler delphi et labview ......
Marsh Posté le 27-05-2003 à 14:22:32
Attention on est plus sous DOS
Sous Win32 les processus ne peuvent pas partager entre eux de la mémoire ( mode protégé).
Une dll fait partie du processus qu'il l'appelle, donc la mémoire utilisée par cette dll appartient au processus appellant
Par example si une dll a une variable statique "int TOTO" et bien il aura autant de variable TOTO que de processus qui appelle la dll
Pour partager la memoire entre processus il faut utiliser des fonctions comme le File Mapping ( le plus simple ), DDE, OLE, COM ...
Marsh Posté le 27-05-2003 à 17:15:27
Bon j'y suis pas mal arrivé en utilisant le DDE.
Mais j'ai une derniere petite question. ESt ce possible d'implémenter le client DDE dans une dll faite avec delphi.
Comme ca je pourrais faire un soft sous labview qui sera serveur DDE, puis la dll avec dedans une fonctions qui renverrais en fait la lecture DDE.
Comme ca je Fixe dans le soft labview puis dans la dll, le nom des parametre DDE (Service, Topic ....) ?
Je sais je suis gourmand en information mais promis c'est la derniere question.
Marsh Posté le 27-05-2003 à 17:40:28
bah à priori tu mets ce que tu veux dans ta DLL Delphi
Marsh Posté le 27-05-2003 à 19:30:54
Mouai sauf que comme je veux modifier des propriete d'un composant, je dois mettre le composant DDE sur une form, donc je dois ajouter une Unit, et la quand je parametre mon DDECLientConv1 (service ,...) , la dll se compile bien mais des que je l'appelle ca me plante mechament mon prog !!
Marsh Posté le 27-05-2003 à 19:43:53
Tu crées bien ta form dans ta DLL ?
Sinon ce que tu peux faire c'est créer le composant via code, sans passer par une form, en passant nil comme owner.
Marsh Posté le 27-05-2003 à 21:12:35
j'ai bien saisi ce que tu me dis de faire , mais je vois pas comment le faire. qd j'ajoute le DDEcomposant dans sur ma form, ca ma rajoute auto dans l'unit : Ddeman (dans les uses), et le type DdeClientConv1: TDdeClientConv .
Mais donc comment je peux ajouter ca dans mon DPR de la dll jsute en ligne de code ?
la je vois pas.
Marsh Posté le 27-05-2003 à 21:20:14
bah dans le DPR tu rajoutes le truc dans les uses, tu crées quelque part une variable de type TDDEmachin, puis au début de ta fonction appelée de l'extérieur tu crées ce bidule
variableDDE := TDDEmachin.Create(nil)
et tu le vires à la fin
variableDDE.Free;
Si tu dois l'utiliser dans plusieurs fonctions non liées, tu peux le créer dans la section initialization, et le détruire dans finalization :
Code :
|
Marsh Posté le 27-05-2003 à 21:55:48
Un énorme Merci pour le grand chef ANTP !!!
Ca marche
Bon je vais p-etre arreter de bosser now,j'en ai eu assez pour la journée.
Je vais aller faire un tour sur ton site web.
Encore merci et @ plus.
Van_axl
Marsh Posté le 26-05-2003 à 18:05:09
Bon voila, j'ai 2 softs qui ne sont pas parogrammé dans le meme langage (delphi et labview en l'occurence). Je veut créer une dll qui puisse faire passer des données de l'un a l'autre. Elle serait donc appeler par les 2 softs.
Mais comment faire car si un soft charge la dll, l'autre ne pourra charger qu'un doublon de la dll.
Donc si j'envoie une donnée dans une fonction par 1 soft, l'autre ne pourra pas lire cette donnée car lui bosse avec la dll "doublon" !!
Donc je suis embeté, y a p-etre un autre moyen pour echanger des données , mais je vais pas trop.
Si vous avez une idée, elle sera la bienvenue.
THx