bonjour a tous!
j'ai deux applications differentes qui tournent en meme temps.
Je veux envoyer un message de l'ne vers l'autre, mais un message
personnalise (WM_USER + XXX)
Or SendMessage et PostMessage ne l'autorisent pas.
Quelqu'un aurait-il une solution a me proposer?
Merci!
toms
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Manuel Leclerc
toms a écrit :
j'ai deux applications differentes qui tournent en meme temps. Je veux envoyer un message de l'une vers l'autre, mais un message personnalise (WM_USER + XXX) Or SendMessage et PostMessage ne l'autorisent pas.
Pourquoi écris-tu que "ne l'autorisent pas." ?
toms a écrit :
j'ai deux applications differentes qui tournent
en meme temps. Je veux envoyer un message de l'une
vers l'autre, mais un message personnalise
(WM_USER + XXX)
Or SendMessage et PostMessage ne l'autorisent pas.
j'ai deux applications differentes qui tournent en meme temps. Je veux envoyer un message de l'une vers l'autre, mais un message personnalise (WM_USER + XXX) Or SendMessage et PostMessage ne l'autorisent pas.
Pourquoi écris-tu que "ne l'autorisent pas." ?
toms
> Pourquoi écris-tu que "ne l'autorisent pas." ?
ben parce que ce n'est pas autorise par l'API : "The system only does marshalling for system messages (those in the range 0 to WM_USER). To send other messages (those above WM_USER) to another process, you must do custom marshalling."
Et moi je ne sais pas ce que c'est, le marshalling ;)
> Pourquoi écris-tu que "ne l'autorisent pas." ?
ben parce que ce n'est pas autorise par l'API :
"The system only does marshalling for system messages (those in the range 0
to WM_USER). To send other messages (those above WM_USER) to another
process, you must do custom marshalling."
Et moi je ne sais pas ce que c'est, le marshalling ;)
ben parce que ce n'est pas autorise par l'API : "The system only does marshalling for system messages (those in the range 0 to WM_USER). To send other messages (those above WM_USER) to another process, you must do custom marshalling."
Et moi je ne sais pas ce que c'est, le marshalling ;)
Manuel Leclerc
toms a écrit :
> Pourquoi écris-tu que "ne l'autorisent pas." ?
ben parce que ce n'est pas autorise par l'API : "The system only does marshalling for system messages (those in the range 0 to WM_USER). To send other messages (those above WM_USER) to another process, you must do custom marshalling."
Et moi je ne sais pas ce que c'est, le marshalling ;)
Je pense qu'ils parlent là du contenu de wParam et lParam. S'il y a des pointeurs vers de la mémoire du process qui envoie, quand le process qui reçoit essaye d'utiliser ces pointeurs, ça fait boum.
Le marshalling consiste ici à ce que les pointeurs qui sont présentés au process receveur pointent bien dans son espace d'adressage. Ca suppose que le code qui fait le marshalling connaissent la sémantique des messages, car il doit faire des copies de données d'un espace d'adressage à l'autre, et pour copier, il faut savoir quoi et dans quel sens, surtout quand c'est SendMessage. Pense à WM_GETTEXT/WM_SETTEXT par exemple.
Si tu n'envoies pas de pointeur, pas de problèmes.
Si tu veux envoyer des pointeurs, donc des données, tu peux utiliser WM_COPYDATA, qui est fait pour ça.
toms a écrit :
> Pourquoi écris-tu que "ne l'autorisent pas." ?
ben parce que ce n'est pas autorise par l'API :
"The system only does marshalling for system
messages (those in the range 0 to WM_USER). To
send other messages (those above WM_USER) to
another process, you must do custom marshalling."
Et moi je ne sais pas ce que c'est, le marshalling ;)
Je pense qu'ils parlent là du contenu de wParam et
lParam. S'il y a des pointeurs vers de la mémoire
du process qui envoie, quand le process qui reçoit
essaye d'utiliser ces pointeurs, ça fait boum.
Le marshalling consiste ici à ce que les pointeurs
qui sont présentés au process receveur pointent bien
dans son espace d'adressage. Ca suppose que le code
qui fait le marshalling connaissent la sémantique des
messages, car il doit faire des copies de données d'un
espace d'adressage à l'autre, et pour copier, il faut
savoir quoi et dans quel sens, surtout quand c'est
SendMessage. Pense à WM_GETTEXT/WM_SETTEXT par exemple.
Si tu n'envoies pas de pointeur, pas de problèmes.
Si tu veux envoyer des pointeurs, donc des données, tu
peux utiliser WM_COPYDATA, qui est fait pour ça.
ben parce que ce n'est pas autorise par l'API : "The system only does marshalling for system messages (those in the range 0 to WM_USER). To send other messages (those above WM_USER) to another process, you must do custom marshalling."
Et moi je ne sais pas ce que c'est, le marshalling ;)
Je pense qu'ils parlent là du contenu de wParam et lParam. S'il y a des pointeurs vers de la mémoire du process qui envoie, quand le process qui reçoit essaye d'utiliser ces pointeurs, ça fait boum.
Le marshalling consiste ici à ce que les pointeurs qui sont présentés au process receveur pointent bien dans son espace d'adressage. Ca suppose que le code qui fait le marshalling connaissent la sémantique des messages, car il doit faire des copies de données d'un espace d'adressage à l'autre, et pour copier, il faut savoir quoi et dans quel sens, surtout quand c'est SendMessage. Pense à WM_GETTEXT/WM_SETTEXT par exemple.
Si tu n'envoies pas de pointeur, pas de problèmes.
Si tu veux envoyer des pointeurs, donc des données, tu peux utiliser WM_COPYDATA, qui est fait pour ça.
toms
> Je pense qu'ils parlent là du contenu de wParam et lParam. S'il y a des pointeurs vers de la mémoire du process qui envoie, quand le process qui reçoit essaye d'utiliser ces pointeurs, ça fait boum.
Le marshalling consiste ici à ce que les pointeurs qui sont présentés au process receveur pointent bien dans son espace d'adressage. Ca suppose que le code qui fait le marshalling connaissent la sémantique des messages, car il doit faire des copies de données d'un espace d'adressage à l'autre, et pour copier, il faut savoir quoi et dans quel sens, surtout quand c'est SendMessage. Pense à WM_GETTEXT/WM_SETTEXT par exemple.
Si tu n'envoies pas de pointeur, pas de problèmes.
Si tu veux envoyer des pointeurs, donc des données, tu peux utiliser WM_COPYDATA, qui est fait pour ça.
merci je vais essayer. Mais si j'ai bien compris, j'aurais a moins du recevoir le message, meme si apres j'aurais recupere n'importe quoi... Or le message n'est jamais recu ... Ou alors, c'est que tout simplement les messages USER ne sont pas autorises a cause du risque d'adressage a une memoire non valide dans le process receveur (ca doit meme etre ca d'ailleurs!) Mais en tout cas, je vais essayer avec WM_COPYDATA, ou RegisterWindowMessage S'il y a d'autres solutions, je suis preneur, pour l'info. Merci en tout cas, parce que c clair que je n'avais pas pense au pb de l'adressage. :)
> Je pense qu'ils parlent là du contenu de wParam et
lParam. S'il y a des pointeurs vers de la mémoire
du process qui envoie, quand le process qui reçoit
essaye d'utiliser ces pointeurs, ça fait boum.
Le marshalling consiste ici à ce que les pointeurs
qui sont présentés au process receveur pointent bien
dans son espace d'adressage. Ca suppose que le code
qui fait le marshalling connaissent la sémantique des
messages, car il doit faire des copies de données d'un
espace d'adressage à l'autre, et pour copier, il faut
savoir quoi et dans quel sens, surtout quand c'est
SendMessage. Pense à WM_GETTEXT/WM_SETTEXT par exemple.
Si tu n'envoies pas de pointeur, pas de problèmes.
Si tu veux envoyer des pointeurs, donc des données, tu
peux utiliser WM_COPYDATA, qui est fait pour ça.
merci je vais essayer.
Mais si j'ai bien compris, j'aurais a moins du recevoir le message, meme si
apres j'aurais recupere n'importe quoi... Or le message n'est jamais recu
... Ou alors, c'est que tout simplement les messages USER ne sont pas
autorises a cause du risque d'adressage a une memoire non valide dans le
process receveur (ca doit meme etre ca d'ailleurs!)
Mais en tout cas, je vais essayer avec WM_COPYDATA, ou RegisterWindowMessage
S'il y a d'autres solutions, je suis preneur, pour l'info.
Merci en tout cas, parce que c clair que je n'avais pas pense au pb de
l'adressage.
:)
> Je pense qu'ils parlent là du contenu de wParam et lParam. S'il y a des pointeurs vers de la mémoire du process qui envoie, quand le process qui reçoit essaye d'utiliser ces pointeurs, ça fait boum.
Le marshalling consiste ici à ce que les pointeurs qui sont présentés au process receveur pointent bien dans son espace d'adressage. Ca suppose que le code qui fait le marshalling connaissent la sémantique des messages, car il doit faire des copies de données d'un espace d'adressage à l'autre, et pour copier, il faut savoir quoi et dans quel sens, surtout quand c'est SendMessage. Pense à WM_GETTEXT/WM_SETTEXT par exemple.
Si tu n'envoies pas de pointeur, pas de problèmes.
Si tu veux envoyer des pointeurs, donc des données, tu peux utiliser WM_COPYDATA, qui est fait pour ça.
merci je vais essayer. Mais si j'ai bien compris, j'aurais a moins du recevoir le message, meme si apres j'aurais recupere n'importe quoi... Or le message n'est jamais recu ... Ou alors, c'est que tout simplement les messages USER ne sont pas autorises a cause du risque d'adressage a une memoire non valide dans le process receveur (ca doit meme etre ca d'ailleurs!) Mais en tout cas, je vais essayer avec WM_COPYDATA, ou RegisterWindowMessage S'il y a d'autres solutions, je suis preneur, pour l'info. Merci en tout cas, parce que c clair que je n'avais pas pense au pb de l'adressage. :)
Remi Thomas
toms wrote:
bonjour a tous! j'ai deux applications differentes qui tournent en meme temps. Je veux envoyer un message de l'ne vers l'autre, mais un message personnalise (WM_USER + XXX) Or SendMessage et PostMessage ne l'autorisent pas. Quelqu'un aurait-il une solution a me proposer? Merci! toms
PostMessage fonctionne très bien entre application mais sans pointeurs vers structure dans les arguments. Les Event (voir CreateEvent) sont des objets de synchronisation unique que tu peux ouvrir dans plusieurs applications. Tu peux aussi partager les Memory Mapped file (= fichier temporaire)
Avec ces deux technologies tu peux partager des structures entre applications.
Sinon tu peux aussi utiliser les Pipe, les sockets, COM, le presse papier (pas très beau techniquement parlant mais peut dépanner par sa mise en oeuvre rapide), voir une base de données.
Enfin sous .NET tu peux utiliser le remoting.
Rémi
-- Rémi Thomas - MVP Visual Studio .NET Développeur Windows indépendant http://www.xtware.com/cv
toms wrote:
bonjour a tous!
j'ai deux applications differentes qui tournent en meme temps.
Je veux envoyer un message de l'ne vers l'autre, mais un message
personnalise (WM_USER + XXX)
Or SendMessage et PostMessage ne l'autorisent pas.
Quelqu'un aurait-il une solution a me proposer?
Merci!
toms
PostMessage fonctionne très bien entre application mais sans pointeurs vers
structure dans les arguments.
Les Event (voir CreateEvent) sont des objets de synchronisation unique que
tu peux ouvrir dans plusieurs applications.
Tu peux aussi partager les Memory Mapped file (= fichier temporaire)
Avec ces deux technologies tu peux partager des structures entre
applications.
Sinon tu peux aussi utiliser les Pipe, les sockets, COM, le presse papier
(pas très beau techniquement parlant mais peut dépanner par sa mise en
oeuvre rapide), voir une base de données.
Enfin sous .NET tu peux utiliser le remoting.
Rémi
--
Rémi Thomas - MVP Visual Studio .NET
Développeur Windows indépendant
http://www.xtware.com/cv
bonjour a tous! j'ai deux applications differentes qui tournent en meme temps. Je veux envoyer un message de l'ne vers l'autre, mais un message personnalise (WM_USER + XXX) Or SendMessage et PostMessage ne l'autorisent pas. Quelqu'un aurait-il une solution a me proposer? Merci! toms
PostMessage fonctionne très bien entre application mais sans pointeurs vers structure dans les arguments. Les Event (voir CreateEvent) sont des objets de synchronisation unique que tu peux ouvrir dans plusieurs applications. Tu peux aussi partager les Memory Mapped file (= fichier temporaire)
Avec ces deux technologies tu peux partager des structures entre applications.
Sinon tu peux aussi utiliser les Pipe, les sockets, COM, le presse papier (pas très beau techniquement parlant mais peut dépanner par sa mise en oeuvre rapide), voir une base de données.
Enfin sous .NET tu peux utiliser le remoting.
Rémi
-- Rémi Thomas - MVP Visual Studio .NET Développeur Windows indépendant http://www.xtware.com/cv
toms
> PostMessage fonctionne très bien entre application mais sans pointeurs
vers
structure dans les arguments. Les Event (voir CreateEvent) sont des objets de synchronisation unique que tu peux ouvrir dans plusieurs applications. Tu peux aussi partager les Memory Mapped file (= fichier temporaire)
Avec ces deux technologies tu peux partager des structures entre applications.
Sinon tu peux aussi utiliser les Pipe, les sockets, COM, le presse papier (pas très beau techniquement parlant mais peut dépanner par sa mise en oeuvre rapide), voir une base de données.
Enfin sous .NET tu peux utiliser le remoting.
?? connait pas! je vais chercher ca merci!
> PostMessage fonctionne très bien entre application mais sans pointeurs
vers
structure dans les arguments.
Les Event (voir CreateEvent) sont des objets de synchronisation unique que
tu peux ouvrir dans plusieurs applications.
Tu peux aussi partager les Memory Mapped file (= fichier temporaire)
Avec ces deux technologies tu peux partager des structures entre
applications.
Sinon tu peux aussi utiliser les Pipe, les sockets, COM, le presse papier
(pas très beau techniquement parlant mais peut dépanner par sa mise en
oeuvre rapide), voir une base de données.
> PostMessage fonctionne très bien entre application mais sans pointeurs
vers
structure dans les arguments. Les Event (voir CreateEvent) sont des objets de synchronisation unique que tu peux ouvrir dans plusieurs applications. Tu peux aussi partager les Memory Mapped file (= fichier temporaire)
Avec ces deux technologies tu peux partager des structures entre applications.
Sinon tu peux aussi utiliser les Pipe, les sockets, COM, le presse papier (pas très beau techniquement parlant mais peut dépanner par sa mise en oeuvre rapide), voir une base de données.