Filemapping et un peu plus [Résolu]

Signaler
Messages postés
69
Date d'inscription
lundi 10 février 2003
Statut
Membre
Dernière intervention
29 août 2012
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
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

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
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++