Passage d'arguments d'une application à une autre [C/C#] - C#/.NET managed - Programmation
Marsh Posté le 01-07-2004 à 17:18:26
Essaie d'envoyer tes paramètres par la fonction SendMessage de Win32 (ça t'oblige par contre à déclarer cette fonction dans ton programme C#).
Tu déclares un message personnalisé (WM_PORT par exemple), et tu le transmets à ton programme C en mettant le n° de port dans lParam par exemple.
Puis, dans ton programme C, tu interceptes le message WM_PORT dans la pompe à messages de ta fenêtre principale, et tu en récupères le lParam.
Autre moyen pour faire communiquer tes programmes entre eux : les sockets (mais à mon avis, pour le problème décrit, c'est un coup de canon pour tuer une mouche)
Marsh Posté le 01-07-2004 à 17:22:44
si ton appli C reside dans une DLL tu peux aussi utiliser une fonction c# externe avec l'attribut DllImport
ca rend un truc genre :
Code :
|
Marsh Posté le 01-07-2004 à 17:28:46
Mon argument est envoyé par ma fonction d'appel de l'autre application, celle en C (c un collegue qui m'a aide parce que moi j'ai vraiment du mal )
Donc en gros a partir de ca, je peux flusher ma variable Port et la remplacer dedans directement?
Sinon ca m'interesse ta methode des socket (surtout que pour l'application en C# j'en utilise pour communiquer avec l'environnement exterieur)
Marsh Posté le 01-07-2004 à 17:29:17
chrisbk a écrit : si ton appli C reside dans une DLL tu peux aussi utiliser une fonction c# externe avec l'attribut DllImport
|
j'utilise pas les Dll
c limite si je savais pas ce que ct a mon arrivee
Marsh Posté le 02-07-2004 à 09:32:16
kytine a écrit : Voila mon problème : j'ai deux applications à réaliser, une en C# (1) et l'autre en C (2). |
euh c'est vraiment tout con ca... comment tu lances l'appli 2 via l'appli 1 ? (dans le code)
Car il suffit de rajouter ton n° de port apres le nom du fichier (comme un argument normal quoi) et dans l'appli 2, tu recuperes ca dans le
Code :
|
Marsh Posté le 02-07-2004 à 09:41:53
merchi
et dans les proprietes du projet je mets quoi alors?
Desolee de vous embeter : apparemment ca a l'air con mais j'ai du mal en ce moment
Marsh Posté le 02-07-2004 à 10:11:17
kytine a écrit : merchi |
ce qu'il faudrait qu'on sache, c'est si tu souhaites transmettre le n° de port à partir du code de l'appli 1.
car si c'est pas le cas, alors la soluce de Tamahome suffit largement.
sinon, pour en revenir aux sockets, c'est tout con :
- tu créé un socket serveur dans l'appli 2 (celle qui devra récupérer le port)
- tu met ce socket en écoute sur un port que tu auras toi même défini
- dans l'appli 1, tu créé un autre socket, qui se connectera à celui de l'appli 2 via le numéro de port
- puis tu utilises ce socket client pour envoyer ta donnée au socket serveur de l'appli 2
comme je te disais, c'est lourd pour ce que tu souhaites faire
Marsh Posté le 02-07-2004 à 10:24:18
Alors voila : mon application 1 recoit des informations d'invite d'ouverture de session sip et en gros y a un message Mime avec la description de toute la session dedans.
Je recupere le numero du port RTP qu'il ouvre et c ce numero de port que je veux envoyer a l'appli 2
Donc je pense que la solution de tamahome suffit nan?
En plus j'ai cru entendre que les sockets en C c assez bourrin
Marsh Posté le 02-07-2004 à 10:28:01
dans ce cas, oui, la soluce de Tamahome est suffisante. un petit ShellExecute dans ton appli 1 pour lancer l'appli 2 avec l'argument, et ça roule (autant tout faire en automatique )
Marsh Posté le 02-07-2004 à 10:30:05
non les sockets en C sont assez simple à mettreen oeuvre, le seul truc dangereux c'est de bien vérfier les buffer overflow (ben oui, le C et les char* ...)
Sinon, comment tu lances ton appli 2 via ton appli 1 ?
tu utilises un truc comme ca :
Code :
|
Marsh Posté le 02-07-2004 à 10:33:08
merci
on m'avais filer deja un bout de code pour lancer mon appli a partir du c#
Marsh Posté le 02-07-2004 à 10:33:55
Harkonnen a écrit : dans ce cas, oui, la soluce de Tamahome est suffisante. un petit ShellExecute dans ton appli 1 pour lancer l'appli 2 avec l'argument, et ça roule (autant tout faire en automatique ) |
c clair
Marsh Posté le 02-07-2004 à 14:55:32
je voulais juste dire que ca marchait nickel (je m'etais trompe dans le passage d'une variable )
Merchi a tout ceux qui m'ont aide
Marsh Posté le 02-07-2004 à 21:53:02
ce fut un plaisir
(asv ? )
Marsh Posté le 02-07-2004 à 23:19:27
ReplyMarsh Posté le 02-07-2004 à 23:35:06
Harkonnen a écrit : ce fut un plaisir |
ah non pas ici
je veux bien le donner mais alors on m'aide dans mon prog
Marsh Posté le 02-07-2004 à 23:41:58
je peux même te le faire entièrement si tu veux
Marsh Posté le 02-07-2004 à 23:56:04
Harkonnen a écrit : je peux même te le faire entièrement si tu veux |
mp
non je rigole
de l'aide suffira
Marsh Posté le 02-07-2004 à 23:59:22
et merde, encore un ratal
edit: je suis vraiment une sous merde, j'arrive meme pas à draguer une nerdzette
Marsh Posté le 03-07-2004 à 00:09:09
Harkonnen a écrit : et merde, encore un ratal |
et pis celine ne serait pas contente
un truc je pense tout con mais que je retrouve pas comment on fait pour fermer l'application en C?
Marsh Posté le 03-07-2004 à 00:19:38
kytine a écrit : |
exit()
Marsh Posté le 03-07-2004 à 00:25:29
Marsh Posté le 03-07-2004 à 00:28:55
gout de night
Marsh Posté le 07-07-2004 à 10:40:54
kytine a écrit : |
et si je veux que ce soit mon application en C# qui ferme mon application en C? qqn a des conseils
Marsh Posté le 07-07-2004 à 12:04:48
kytine a écrit : et si je veux que ce soit mon application en C# qui ferme mon application en C? qqn a des conseils |
Oui, là encore tu peux utiliser l'API, même en C# :
- un petit coup de
Code :
|
pour envoyer un message à ton programme en C,
- un petit coup de
Code :
|
pour récupérer le handle de ton programme C à partir de sa fenêtre
- et un petit coup de
Code :
|
dans ton programme C# pour fermer le programme en C (handle = handle du programme C récupéré via FindWindow)
Marsh Posté le 01-07-2004 à 17:13:25
Voila mon problème : j'ai deux applications à réaliser, une en C# (1) et l'autre en C (2).
1 lance a un moment 2 et doit lui envoyer comme argument un numero de port pour que cette dernière puisse se connecter dessus.
Le hic, c'est que sous .NET (enfin comment j'ai fait), les arguments sont saisis dans les proprietes du projet qui genere l'application.
Comment faire pour faire passer cet argument et le remplacer sans problème?
Merci d'avance
Message édité par kytine le 01-07-2004 à 17:30:58