Partage des données entre deux exécutions de DLL

Le
Roger
Bon je n'avais pas compris au départ qu'entre deux exécutions d'une même dll
ça n'était pas forcément toujours la même image de la dll qui s'exécutait,
ce qui fait que d'une exécution à l'autre les données initialisées
dynamiquement n'étaient pas conservées. L'ayant finalement compris à mes
dépends je m'en suis sorti de manière brutale mais efficace en mettant les
données qui ont été modifiées et que je veux retrouver dans l'exécution
suivante dans un fichier que je sauvegarde en fin de chaque exécution et que
je relis en début de chaque exécution. Toutefois cette méthode qui marche
très bien est un peu bestiale et j'ai voulu trouver quelque chose de plus
standard, je me suis donc penché sur les segments et le mapping, mais pour
l'instant je n'ai pas dû tout comprendre.
Concernant les segments, j'ai testé deux trucs qui passent très bien en
compilation, mais je ne retrouve pas mes données d'une exécution à l'autre:
1er test:
#pragma section("Zonecommune",read,write,shared)
struct DETAIL // structure des données récupérables d'une exécution à
l'autre
{
<<<<<<<<< ici mes données à récupérer >>>>>>>>>>>>
}
#pragma data_seg("Zonecommune")
DETAIL Mesdonnees;
#pragma data_seg()

2ème test:
struct DETAIL // structure des données récupérables d'une exécution à
l'autre
{
<<<<<<<<< ici mes données à récupérer >>>>>>>>>>>>
}
#pragma data_seg("Shared")
DETAIL Mesdonnees;
#pragma data_seg()

Dans les deux tests, j'initialise Mesdonnees.toto, Mesdonnees.truc etc au
premier passage et aux passages suivant les initialisations ont été perdues
! Fallait-il faire autre chose ??

Concernant le mapping, j'ai commencé à faire ceci:

HANDLE hdlemap;
LPVOID ptrmap;
hdlemap = CreateFileMapping((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0,
longdetail, NULL);
ptrmap = MapViewOfFile(hdlemap, FILE_MAP_WRITE, 0, 0, 0);

Mais une fois que j'ai le pointeur sur la zone mappée (ptrmap), d'une part
je ne vois pas comment l'utiliser pour mettre mes données dedans, d'autre
part le ptrmap d'après ce que je comprends n'étant pas lui-même dans la zone
mappée, je ne vois pas comment le récupérer d'une exécution à l'autre ?
(sauf évidemment à le sauver dans un fichier, mais alors ça n'a plus
d'intérêt)

Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Roger
Le #23214711
Désolé j'ai eu une réponse du système me disant que mon message n'avait pas
pu être envoyé, j'ai vérifié qu'effectivement il n'était pas arrivé dans le
groupe, mais quand je l'ai renvoyé il en est arrivé deux !!!
Publicité
Poster une réponse
Anonyme