String à travers IntPtr [Résolu]

Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
- - Dernière réponse : LUDINSKI
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
- 12 avril 2007 à 11:05
Bonjour à tous,

J'utilise PostMessage pour envoyer un message WM_USER à mon application
Tout ça fonctionne très bien, mais je souhaite passer une chaîne de caractères par ce message
( via LParam )

J'ai donc essayé de passer par Marshal.StringToHGlobalAuto( monString );
pour récupérer un pointeur sur ma chaîne
et Marshal.PtrToStringAuto( msg.LParam ); pour le récupérer

Mais je récupère une chaîne vide...
Quelqu'un aurait-il une proposition pour envoyer cette maudite chaîne ?
Merci
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
6
3
Merci
Salut Lutinore ( tu n'dors jamais? ) ^^,

En effet, je n'ai pas utilisé PreProcessMessage() mais je n'voulais pas entrer dans les détails...
Le message, je l'intercepte grâce à l'interface IMessageFilter, donc par la méthode PreFiltreMessage()... Et cela fonctionne
Mais je vais quand même utiliser ta méthode, je n'la connaissais pas !

Pour mon problême, je l'ai résolu grâce aux Atomes globaux :
- Je crée un atome globale grâce à GlobalAddAtom( monString );
  et je passe l'identifiant de l'atome dans le message windows
- A la réception du message je récupère l'atom grâce à son identifiant :
  GlobalGetAtomName( msg.LParam.ToInt32(), ... );
- Puis je supprime l'atome de la table globale GlobalDeleteAtom();

Je pense que je n'avais pas le droit de lire à l'adresse mémoire allouée par l'application émettrice... Par contre ça ne me générai pas d'erreur !

Bref, problème résolu... Merci quand même

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 212 internautes nous ont dit merci ce mois-ci

Commenter la réponse de LUDINSKI
Messages postés
273
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
6 février 2009
1
0
Merci
Salut,
Tu as essayé avec : Marshal.StringToHGlobalUni ?

<hr />
ZeBobo5
N'oubliez pas de cloturer votre post.
Commenter la réponse de zebobo5
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
6
0
Merci
Salut zebobo5,

Oui, et même Marshal.StringToHGlobalAnsi...
Mais il semblerai que ça soit un problème de sécurité :
Quand je récupère ma chaîne directement après
Marshal.StringToHGlobalAuto( monString );
Je la récupère bien...

Mais quand j'essaye de la récupérer après la réception du message windows (donc dans PreProcessMessage) la chaîne est vide !

Merci quand même ;)
Commenter la réponse de LUDINSKI
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
29
0
Merci
Salut, tu es sûr que c'est ton message ? et pourquoi PreProcessMessage et non WndProc ?
Commenter la réponse de Lutinore