String à travers IntPtr

Résolu
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 - 11 avril 2007 à 15:44
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

4 réponses

LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
12 avril 2007 à 11:05
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
3
zebobo5 Messages postés 273 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 6 février 2009 1
11 avril 2007 à 16:43
Salut,
Tu as essayé avec : Marshal.StringToHGlobalUni ?

<hr />
ZeBobo5
N'oubliez pas de cloturer votre post.
0
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
11 avril 2007 à 17:51
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 ;)
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
12 avril 2007 à 02:57
Salut, tu es sûr que c'est ton message ? et pourquoi PreProcessMessage et non WndProc ?
0
Rejoignez-nous