File Mapping entre 2 programmes

Résolu
Arkadias Messages postés 6 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 12 novembre 2007 - 16 oct. 2007 à 16:36
Arkadias Messages postés 6 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 12 novembre 2007 - 17 oct. 2007 à 09:51
Bonjour,
Je développe une application ou il sera nécessaire à 2 programmes différents (mais éxecuté sur la même machine) d'échanger les données d'un buffer. Pour ce faire j'ai tenté de me faire un petit programme de test mais j'ai un problème.

Contexte : Un des 2 programmes (qu'on va appeler Prog1) va seulement écrire dans le buffer, Prog2 quand à lui ira seulement le lire.

Problème : J'arrive bien à écrire dans le buffer y a pas de soucis par contre je n'arrive pas à lire le buffer à partir du Prog2.

Mon code :

Prog1 :
{
 unsigned char buffer[10]={97,98,99};
 unsigned long ecrit;
 bool write = false;



HANDLE hFile = CreateFile("test.txt",GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, 0);
 if (hFile == INVALID_HANDLE_VALUE)
  AfxMessageBox("Erreur Create");

 HANDLE hMapping = CreateFileMapping(hFile,NULL, PAGE_READWRITE, 0, 3, "Buffer");
 if (hMapping == NULL)
  AfxMessageBox("Erreur Mapping");

 write = WriteFile(hFile,buffer,3, &ecrit, NULL);
 SetFilePointer (hFile,0, NULL, FILE_BEGIN);
 system("PAUSE"); //Je fais juste une pause pour lancer le 2ème programme sans fermer le handle)
 CloseHandle(hFile); 
}


Prog2 :


{
 HANDLE hMapping;
 LPVOID Map;
 unsigned long ecrit;
 bool read = false;
 unsigned char buffer[10];




 hMapping = OpenFileMapping(FILE_MAP_READ, 0, "Buffer");
 if (!hMapping)
  AfxMessageBox("Erreur Open Mapping");




 Map = MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0);
 if (!Map)
  CloseHandle(hMapping);




 read = ReadFile(Map,buffer,3,&ecrit, NULL);
}

D'après ce que j'avais compris sur ce lien
http://msdn2.microsoft.com/en-us/library/aa366878.aspx
 , c'est le MapViewOfFile qui retourne le pointeur sur le buffer mais... la lecture ne ce fait pas.

Quelqu'un saurai-il ou ce trouve le problème ?

p.s : Je ne suis pas super fort en programmation...mais j'éssaye de m'y mettre ^^

3 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
16 oct. 2007 à 17:59
Si c'est juste pour échanger des données pas besoin de fichier tu fais direct :
CreateFileMapping(INVALID_HANDLE_VALUE,...);
pour écrire par ex.
char* pBuffer=(char*)MapViewOfFile(...);
pBuffer[0]='T';
quand tu as fini d'écrire :
UnmapViewOfFile(...);
CloseHandle(...);

et dans l'autre prog.
OpenFileMapping(..);
char* pBuffer=(char*)MapViewOfFile(...);
printf("%c\n",pBuffer[0]);
UnmapViewOfFile(...);
CloseHandle(...);

ceci devrait marcher.
3
Arkadias Messages postés 6 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 12 novembre 2007
16 oct. 2007 à 18:30
Bonjour,
Merci de la réponse, je vais tester ça demain à la première heure ^^
0
Arkadias Messages postés 6 Date d'inscription mardi 16 octobre 2007 Statut Membre Dernière intervention 12 novembre 2007
17 oct. 2007 à 09:51
Ta solution fonctionne très bien juju12, merci encore pour le coup de main ^^
0
Rejoignez-nous