Appel d'une meme dll par 2 softs differents, pour echange une donnée

Appel d'une meme dll par 2 softs differents, pour echange une donnée - Delphi/Pascal - Programmation

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

Reply

Marsh Posté le 26-05-2003 à 18:05:09   

Reply

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.
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


 
l'ecrire dans un fichier texte ?
La faire passer entre les deux appli par un message windows ?


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

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!!

Reply

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 :D)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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.

Reply

Marsh Posté le 27-05-2003 à 10:41:43    

On me parle aussi de FIFO, mais c'est presque du chinois pour moi.

Reply

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.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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


---------------
each day I don't die is cheating
Reply

Marsh Posté le 27-05-2003 à 11:55:11    

ok thx je vais jeter un coup d'oeil.

Reply

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  :pt1cable: ) . 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  [:ddr555] .
 
@->--


---------------
The Only Way for Evils to Triumph is for Good Men to do Nothing @->-- Cours Réseaux@->-- Mon Site
Reply

Marsh Posté le 27-05-2003 à 11:59:26   

Reply

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.


Message édité par van_axl le 27-05-2003 à 12:07:05
Reply

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 ......
:cry:

Reply

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 ...
 
 
 

Reply

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.

Reply

Marsh Posté le 27-05-2003 à 17:40:28    

bah à priori tu mets ce que tu veux dans ta DLL Delphi :??:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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 !!

Reply

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.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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.

Reply

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 :
  1. implementation
  2. uses
  3.   DDEbidule;
  4. var
  5.   variableDDE: TDDEMachin
  6. (toutes tes fonctions ici)
  7. initialization
  8.   variableDDE := TDDEMachin;
  9.   variableDDE.param := truc;
  10.   etc.
  11. finalization
  12.   variableDDE.Free;
  13. end.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed