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 ? ![[:cupra] [:cupra]](https://forum-images.hardware.fr/images/perso/cupra.gif) )
)
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 ![[:cupralf] [:cupralf]](https://forum-images.hardware.fr/images/perso/cupralf.gif)
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 ![[:sisicaivrai] [:sisicaivrai]](https://forum-images.hardware.fr/images/perso/sisicaivrai.gif) 
 
 
edit: je suis vraiment une sous merde, j'arrive meme pas à draguer une nerdzette ![[:sisicaivrai] [:sisicaivrai]](https://forum-images.hardware.fr/images/perso/sisicaivrai.gif)
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?
 comment on fait pour fermer l'application en C? ![[:boidleau] [:boidleau]](https://forum-images.hardware.fr/images/perso/boidleau.gif)
Marsh Posté le 03-07-2004 à 00:19:38
| kytine a écrit :   | 
 
exit() ![[:sinclaire] [:sinclaire]](https://forum-images.hardware.fr/images/perso/sinclaire.gif)
Marsh Posté le 03-07-2004 à 00:25:29
![[:lorill] [:lorill]](https://forum-images.hardware.fr/images/perso/lorill.gif)
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 ![[:cupra] [:cupra]](https://forum-images.hardware.fr/images/perso/cupra.gif)
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