Filemapping et un peu plus

Résolu
PADYVEN Messages postés 69 Date d'inscription lundi 10 février 2003 Statut Membre Dernière intervention 29 août 2012 - 9 mars 2009 à 18:58
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 9 mars 2009 à 19:38
bonjour,
bon j'ai un probleme tout simple je pense qui concerne le file mapping
je veux partager des données entre deux applications
c'est données sont en deux partie

une structure:
struct Partage_s
{
    char Path1[500];
    char Path2[500];
    Ulong NbInfo;
    int BitVie;
};


et apres un tableau de structure ou disons plus simple un tableau de int
int Valeur[NbInfo]
dont le nombre d'elements est le ULong NbInfo contenu dans la structure precedante(ULong=unsigned long int)
j'ai reussi a mapper la structure puis naivement j'ai essayer de mapper la suite donc mon tableau.
et la sa plante(le pointeur de mDataValue est NULL).
 
    HANDLE hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE,0,PAGE_READWRITE,0,sizeof(struct Partage_s)+20*sizeof(int),"filemap");
 mData = (struct Partage_s*)MapViewOfFile(hFileMap,FILE_MAP_ALL_ACCESS,0,0,0);
 mDataValue = (int*)MapViewOfFile(hFileMap,FILE_MAP_ALL_ACCESS,0,sizeof(struct Partage_s),0); //pointe a l'offset suivant


il ne faut pas faire gaffe a l'ecriture en elle meme elle est surement fausse (c'est juste pour expliquer)
je part du fait que j'ai 20 int dans mon tableau

en lisant la doc de MapViewOfFile j'ai vu que les offset devait tenir compte de la granularité de la memoire du systeme chez moi 0x10000 . j'ai essaye de chercher des exemples mais j'ai pas tout compris

si vous pouvez m'aider...merci beaucoup d'avance

1 réponse

BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
9 mars 2009 à 19:38
Tu veux y mettre une struct Partage_s + 1 tableau de 20 int, c'est ça ?

Si oui,
HANDLE hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE,0,PAGE_READWRITE,0,sizeof(Partage_s) + 20 * sizeof(int),"filemap");
VA BON.

tu voudrais donc un pointeur *int sur le tableau et 1 pointeur sur la struct:
Partage_s *ppartage;
int *pint;
ppartage = (Partage_s*) MapViewOfFile(hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
pint = (int*) (ppartage + 1);

Si tu places ton tableau int[] juste derriere la struct, devrait aller.

ciao...
BruNews, MVP VC++
3