GlobalAlloc et le partage d'adresse mémoire

Résolu
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
- 16 juil. 2009 à 13:16
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
- 16 juil. 2009 à 14:18
Salut à tou(te)s
Je n'ai déjà pas beaucoup de cheveux, mais là, j'arrive encore à me les arracher.

J'ai une chaine à transmettre entre deux applications, A et B.
B est en sommeil et surveille par SubClassing le passage d'un Message généré par RegisterWindowMessage.
A envoie ce message et l'accompagne de l'adresse mémoire de ma chaine de caractères
B reçoit bien le message ainsi que l'adresse

Pour transmettre la chaine (~50 caractères), j'ai utilisé GlobalAlloc en mode GMEM_SHARE
(avec la structure de chaine BSTR unicode classique : 4 + LongueurB)
Une fois les données insérées par CopyMemory dans la zone mémoire ainsi créée, je transmets l'adresse dans le message.

Quand B reçoit l'adresse, il refait un CopyMemory pour lire la longueur, puis la chaine.
Mais patratra, à la lecture de la longueur (4 premiers octets), plantage sauvage.
Il semble que GlobalAlloc, contrairement à son nom, ne soit pas global et que la zone mémoire soit réservée à la seule application qui a créé cet espace.

J'ai fait l'essai au sein d'un même projet : pas de problème - mes syntaxes CopyMemory sont donc correctes.

Sauriez-vous comment mon appli B pourrait lire la zone mémoire créée par A ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)

4 réponses

Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
16 juil. 2009 à 13:32
l'adresse recue n'est pas valide dans l'espace mémoire dans lequel est mappée la deuxieme appli.


WM_COPYDATA
est là pour ça :
http://msdn.microsoft.com/en-us/library/ms649011(VS.85).aspx

sinon, un autre moyen :
voir:
http://www.vbfrance.com/codes/PARTAGE-VARIABLES_39615.aspx

ici on joue avec CreateFileMapping et MapViewOfFile


Renfield - Admin CodeS-SourceS - MVP Visual Basic
3
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
16 juil. 2009 à 13:36
Salut Renfield
C'est marrant, j'étais sûr que tu aurais été à l'affût !
Merci, je m'en va étudier ça.
0
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
16 juil. 2009 à 13:40
T'as juste de la chance, en fait, je reviens de grand week-end...

je découvre la V11 et ton message... ^^

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
16 juil. 2009 à 14:18
Ok, c'est bon.
Ca m'oblige à changer mes messages personnalisés, mais on peut le réintroduire dans la structure, comme ça je pourrais quand même vérifier qu'il m'est bien adressé.

Encore une fois, Renfield = mon héros
Merci
0