begin process at 2008 09 06 04:51:53
1 237 644 membres
42 nouveaux aujourd'hui
14 313 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : String à travers IntPtr [ Système / Mémoire ] (LUDINSKI)

String à travers IntPtr le 11/04/2007 15:44:33

LUDINSKI
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


Re : String à travers IntPtr le 11/04/2007 16:43:52

zebobo5
Membre Club
Salut,
Tu as essayé avec : Marshal.StringToHGlobalUni ?


ZeBobo5
N'oubliez pas de cloturer votre post.

Re : String à travers IntPtr le 11/04/2007 17:51:35

LUDINSKI
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 ;)

Re : String à travers IntPtr le 12/04/2007 02:57:39

Lutinore
(Admin CS)
Salut, tu es sûr que c'est ton message ? et pourquoi PreProcessMessage et non WndProc ?

Re : String à travers IntPtr le 12/04/2007 11:05:25

LUDINSKI
Réponse acceptée !
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



Classé sous : string, envoyer, travers, chaîne, intptr

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS