cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
16 juil. 2009 à 13:16
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 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)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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é.