[C/C#] Passage d'arguments d'une application à une autre

Passage d'arguments d'une application à une autre [C/C#] - C#/.NET managed - Programmation

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? :jap:
 
Merci d'avance :hello:


Message édité par kytine le 01-07-2004 à 17:30:58
Reply

Marsh Posté le 01-07-2004 à 17:13:25   

Reply

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)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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 :
  1. [DllImport("maDll","maFonctionExportee" )]
  2. extern void maFonction(int numPort);


Message édité par chrisbk le 01-07-2004 à 17:23:31
Reply

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) :)

Reply

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
 
ca rend un truc genre :

Code :
  1. [DllImport("maDll","maFonctionExportee" )]
  2. extern void maFonction(int numPort);



j'utilise pas les Dll :/
 
c limite si je savais pas ce que ct a mon arrivee :sweat:

Reply

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).
 
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? :jap:
 
Merci d'avance :hello:


 
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 :
  1. int main(char **argc, int argv)
  2.    {
  3. }


Message édité par Tamahome le 02-07-2004 à 09:33:38
Reply

Marsh Posté le 02-07-2004 à 09:41:53    

merchi :)
 
et dans les proprietes du projet je mets quoi alors? :sweat:
 
Desolee de vous embeter : apparemment ca a l'air con mais j'ai du mal en ce moment :sweat:

Reply

Marsh Posté le 02-07-2004 à 10:11:17    

kytine a écrit :

merchi :)
 
et dans les proprietes du projet je mets quoi alors? :sweat:
 
Desolee de vous embeter : apparemment ca a l'air con mais j'ai du mal en ce moment :sweat:


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


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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 :sweat:

Reply

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 :D)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 02-07-2004 à 10:28:01   

Reply

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 :
  1. ProcessStartInfo v_myStartInfo = new ProcessStartInfo();
  2.       v_myStartInfo.CreateNoWindow = true;
  3.       v_myStartInfo.RedirectStandardError = true;
  4.       v_myStartInfo.UseShellExecute = false;
  5.       v_myStartInfo.RedirectStandardOutput = true;
  6.       v_myStartInfo.Arguments = p_Arg;
  7.       v_myStartInfo.FileName = p_fullpathApplication;
  8.       v_myStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
  9.       Process v_myProcess = Process.Start(v_myStartInfo);
  10.       v_myProcess.WaitForExit(p_timeout);


Message édité par Tamahome le 02-07-2004 à 10:30:23
Reply

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# :jap:

Reply

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 :D)

c clair :D

Reply

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 :D)
 
Merchi a tout ceux qui m'ont aide :jap:

Reply

Marsh Posté le 02-07-2004 à 18:50:09    

pas de koiche


---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Marsh Posté le 02-07-2004 à 21:53:02    

ce fut un plaisir :o
(asv ? [:cupra])


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 02-07-2004 à 23:19:27    

Harkonnen a écrit :

ce fut un plaisir :o
(asv ? [:cupra])


 
 :lol:  :lol:  :lol:


---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Marsh Posté le 02-07-2004 à 23:35:06    

Harkonnen a écrit :

ce fut un plaisir :o
(asv ? [:cupra])

ah non pas ici :o
 
je veux bien le donner mais alors on m'aide dans mon prog :whistle: :D

Reply

Marsh Posté le 02-07-2004 à 23:41:58    

je peux même te le faire entièrement si tu veux [:cupralf]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 02-07-2004 à 23:56:04    

Harkonnen a écrit :

je peux même te le faire entièrement si tu veux [:cupralf]

mp :o
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
non je rigole :D
 
de l'aide suffira :o

Reply

Marsh Posté le 02-07-2004 à 23:59:22    

et merde, encore un ratal [:sisicaivrai]
 
edit: je suis vraiment une sous merde, j'arrive meme pas à draguer une nerdzette [:sisicaivrai]


Message édité par Harkonnen le 02-07-2004 à 23:59:55

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 03-07-2004 à 00:09:09    

Harkonnen a écrit :

et merde, encore un ratal [:sisicaivrai]
 
edit: je suis vraiment une sous merde, j'arrive meme pas à draguer une nerdzette [:sisicaivrai]

:heink:  
 
et pis celine ne serait pas contente :o
 
un truc je pense tout con mais que je retrouve pas :o comment on fait pour fermer l'application en C? [:boidleau]

Reply

Marsh Posté le 03-07-2004 à 00:19:38    

kytine a écrit :


un truc je pense tout con mais que je retrouve pas :o comment on fait pour fermer l'application en C? [:boidleau]


exit() [:sinclaire]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 03-07-2004 à 00:24:37    

je me disais bien [:boidleau]

Reply

Marsh Posté le 03-07-2004 à 00:25:29    

[:lorill]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 03-07-2004 à 00:27:48    

[:icon9]
 
Bon je reviens lundi avec mes questions hein :o
 
Bonne nuit :)

Reply

Marsh Posté le 03-07-2004 à 00:28:55    

gout de night :ange:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 03-07-2004 à 00:29:34    

:non: good night :o

Reply

Marsh Posté le 07-07-2004 à 10:40:54    

kytine a écrit :

:heink:  
 
et pis celine ne serait pas contente :o
 
un truc je pense tout con mais que je retrouve pas :o comment on fait pour fermer l'application en C? [:boidleau]

et si je veux que ce soit mon application en C# qui ferme mon application en C? qqn a des conseils [:cupra]

Reply

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 [:cupra]


Oui, là encore tu peux utiliser l'API, même en C# :
- un petit coup de

Code :
  1. [DllImport("User32.Dll" )]
  2. public static extern IntPtr PostMessage(IntPtr hWnd, int msg, int wParam, int lParam);


pour envoyer un message à ton programme en C,
- un petit coup de  

Code :
  1. [DllImport("user32.dll",EntryPoint="FindWindow" )]
  2. private static extern int FindWindow(string _ClassName, string _WindowName);


pour récupérer le handle de ton programme C à partir de sa fenêtre
- et un petit coup de

Code :
  1. PostMessage(handle, WM_QUIT, 0, 0);


dans ton programme C# pour fermer le programme en C (handle = handle du programme C récupéré via FindWindow)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 07-07-2004 à 13:25:24    

je vais essayer ca :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed