File Mapping entre 2 programmes

[Résolu]
Signaler
Messages postés
6
Date d'inscription
mardi 16 octobre 2007
Statut
Membre
Dernière intervention
12 novembre 2007
-
Messages postés
6
Date d'inscription
mardi 16 octobre 2007
Statut
Membre
Dernière intervention
12 novembre 2007
-
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

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
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.
Messages postés
6
Date d'inscription
mardi 16 octobre 2007
Statut
Membre
Dernière intervention
12 novembre 2007

Bonjour,
Merci de la réponse, je vais tester ça demain à la première heure ^^
Messages postés
6
Date d'inscription
mardi 16 octobre 2007
Statut
Membre
Dernière intervention
12 novembre 2007

Ta solution fonctionne très bien juju12, merci encore pour le coup de main ^^