Bonjour,
J’ai utilisé le mapping pour partager des données, ça marche, je récupère bien mes données, mais je ne suis pas sûr que mon utilisation soit correcte.
Voila, j'ai considéré au départ (sûrement à tort) que écrire ou lire dans un
fichier mémoire ça marchait comme read ou write sur un support disque
quelconque, c'est à dire qu'au début,
pour sauvegarder mes données j’ai fait une petite fonction savedata() qui fait (en enlevant les tests pour simplifier):
sachant que comme pour un fichier le CreateFileMapping est équivalent à un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 1.- hdlemap = CreateFileMapping((HANDLE)0xFFFFFFFF, .....,Mymapname); 2.- ptrmap = MapViewOfFile(hdlemap, ....); 3.- CopyMemory(ptrmap, &Mesdonnees,...); // Mesdonnees mapping 4.- CloseHandle(hdlemap ); // je ferme ici comme un fichier sur disque
OpenFileMapping si un fichier de même nom existe déjà.
Pour restorer mes données j’ai fait sur le même style une petite fonction restoredata() qui fait presque la même chose : (à part l’instruction Copy qui est inversée) :
Et je me suis aperçu que ça ne marchait pas, je ne récupérais pas mes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 1.- hdlemap = CreateFileMapping((HANDLE)0xFFFFFFFF, .....,Mymapname); 2.- ptrmap = MapViewOfFile(hdlemap, ....); 3.- CopyMemory(&Mesdonnees, ptrmap,...); // Mapping Mesdonnees 4.- CloseHandle(hdlemap ); // je ferme ici comme un fichier sur disque
données, j'ai alors enlevé simplement l'instruction CloseHandle et
maintenant ça marche nickel, je récupère bien mes données. Cependant dans
cette procédure il y a quelque chose qui ne me paraît pas logique bien que
ça fonctionne, en effet du fait que j'ai enlevé l'instruction CloseHandle on
peut considérer que le mapping est resté ouvert, or à chaque entrée dans une procédure de save ou de restore je suis amené à faire un CreateFileMapping c'est à dire en fait l'équivalent d'un Open sur un fichier déjà ouvert ! il y a quelque chose de dérangeant pour l'esprit et je suis étonné que le système l'accepte !
Ai-je donc bien tout compris ? et est-ce bien ainsi qu'il faut procéder ?
Merci
Partager