| |||||
FORUM HardWare.fr

Programmation

Visu C++ !! Peut-on intercepter des messages destinés à une console ?| Dernière réponse | |
|---|---|
| Sujet : Visu C++ !! Peut-on intercepter des messages destinés à une console ? | |
| Moustaaki | ok, merci pour l'éclaircicement et merci pour le nom de la fonction GetExitCodeProcess, je crois que c'est exactement ça qu'il me faut. Parceque l'appli principal doit continuer à tourner sur une boucle en testant si elle reçoit des caractères et en même temps tester si l'appli appelée s'est terminée ou pas.
je pense que je vais y arriver, maintenant, merci, et à + ( c'est vraiment de la merde les pointeurs :gun: , VIVE le JAVA !!!! ) les pointeurs : [:sharpknife] et [:vomi] [edit]--Message édité par Moustaaki--[/edit] |
| Aperçu |
|---|
| Vue Rapide de la discussion |
|---|
| Moustaaki | ok, merci pour l'éclaircicement et merci pour le nom de la fonction GetExitCodeProcess, je crois que c'est exactement ça qu'il me faut. Parceque l'appli principal doit continuer à tourner sur une boucle en testant si elle reçoit des caractères et en même temps tester si l'appli appelée s'est terminée ou pas.
je pense que je vais y arriver, maintenant, merci, et à + ( c'est vraiment de la merde les pointeurs :gun: , VIVE le JAVA !!!! ) les pointeurs : [:sharpknife] et [:vomi] [edit]--Message édité par Moustaaki--[/edit] |
| HelloWorld | j'ai peu de temps alors ...
"char * trucMachin ; win garde de la mémoire pour le pointeur, donc la taille d'une adresse + la taille d'un caractère sur lequel pointe le... pointeur." c'est le compilo qui fait tout ca + un pointeur est un unsigned long int ... il fait 4 octet (intel 32 bits) et basta qu'il pointe sur des chars, sur des images de 1 Go, ton pointeur fait 4 octets point barre, il contient une adresse memeoire de 4 octets. "donc la taille d'une adresse + la taille d'un caractère sur lequel pointe" si tu fais : char * pointeur; puis *pointeur = 'A'; ca va merder parseke y'a rien qui correspond à l'adresse pointe par ton pointeur : y'a pas de caractere réservé comme tu semble le comprendre ... ;) mais : char caractere; char *pointeur = &caractere; *pointeur = 'A'; la ok, c nickel ;) pour ton histoire de synchronisation de process ... je sais pas si tu parles de thread (y'a eu plein de post la dessus presedement => recherche) ou alors attendre la fin d'un exe .. pour attendre la fin d'un exe que tu as lancé c pas dur, une boucle sans fin (enfin presque) qui teste la valeur de retour de l'exe que tu as lancé ... documente toi sur GetExitCodeProcess ... => lien : c du VB mais c proche (API à fond) http://perso.wanadoo.fr/eric.hanac [...] terAp.html j'insiste : un pointeur = une adresse memoire et c'est tout char * trucMachin ; => garde de la mémoire pour le pointeur, donc la taille d'une adresse, et c'est tout ;) |
| Moustaaki | ICI !! :bounce:
[edit]--Message édité par Moustaaki--[/edit] |
| HelloWorld | personne répond ? alors ... :D
Handle c'est le principe des pointeur mais c'est pas un vrai pointeur : un handle ne contient l'adresse de l'objet pointé mais un numéro l'identifiant dans une table (non accessible, sauf par windows) qui elle contient l'adresse ... en gros je crois que c'est ca ... ainsi tu ne peux pas modifier l'objet "pointé" par le handle, sauf en passant par les fonctions désignées, chargées de le faire (fonction à Windows)... void * : pointeur sur n'importe quoi void ** : un tableau de pointeurs sur n'importe quoi (tu peux remplcer void ** tableau par void * tableau[] ...;)) "je viens de voir que c'était : HANDLE trucMachinSortie ; Si handle est bien un pointeur et bé, ça fait bysarre de faire un pointeur comme ça. Comment se passe l'alloc mémoire ? taille fixe ou dynamique ? (juste pour info)" ben HANDLE est un nombre et tu peux parfaitement le remplacer par unsigned long int .... ce nombre contient une reference (un handle = une poignee) vers un objet ... au nivo de l'alloc, je saisi pas trop ce que tu veux dire, mais généralement c'est Windows qui se charge de tout. quand tu souhaite un objet, Windows se le créé, se l'initialise, lui assigne un handle et te renvoit cet handle ... bon je pense que c'est a peu pres ca ... c'est aussi l'occasion pour moi de voir si j'ai bien tout pigé ... n'hésitez donc surtout pas à corriger :) |
| Moustaaki | wai, le 2ème exemple, c'est des MFC, j'en ai encore jamais fait et j'ai un peu de mal à comprendre le code.
Pour le premier, ya un truc que je comprend po : //create your 6 HANDLES prior to this SECURITY_ATTRIBUTES saAttr; saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); saAttr.bInheritHandle = TRUE; saAttr.lpSecurityDescriptor = NULL; CreatePipe(&errorReadHandle, &errorWriteHandle, &saAttr, 0); CreatePipe(&outputReadHandle, &outputWriteHandle, &saAttr, 0); CreatePipe(&inputReadHandle, &inputWriteHandle, &saAttr, 0); c'est des pointeurs sur quoi ? (Handle, c'est bien pointeur ?) la fonction demande des types void ** , jamais vu ça qu'est que c'est ? Comment dois-je déclaré les variables inputReadHandle, ... ? je viens de voir que c'était : HANDLE trucMachinSortie ; Si handle est bien un pointeur et bé, ça fait bysarre de faire un pointeur comme ça. Comment se passe l'alloc mémoire ? taille fixe ou dynamique ? (juste pour info) [edit]--Message édité par Moustaaki--[/edit] |
| seblamb | Encore mieux :
http://www.codeproject.com/dialog/quickwin.asp |
| seblamb | Je crois que cette adresse va répondre à tes questions :
http://students.cs.byu.edu/~cs345ta/labs/qshell/ |
| Moustaaki |
[edit]--Message édité par Moustaaki--[/edit] |
| petoulachi | "est-ce que je suis vraiment trop con pour faire de l'info et est ce que je ferais pas mieux de faire vigile ?"
j'adore cette confiance en soit ... :sarcastic: |
| Moustaaki | voui, ben ça marche po.
je vous montre ce que j'ai fait, j'ai surement fait des grosses conneries vu que je suis une merde en info : // déclaration variable globale : -----//// // buffer de sortie, permet de rediriger la sortie standard. char sortieO[512] ; // buffer pour les erreurs. char sortieE[512] ; //----- Dans le main : ----/// if(!(SetStdHandle(STD_OUTPUT_HANDLE, sortieO))) { MessageBox(NULL,"Echec dans la redirection", "La redirection à échouée", MB_OK | MB_ICONERROR ) ; } if(!(SetStdHandle(STD_ERROR_HANDLE, sortieE))) { MessageBox(NULL,"Echec dans la redirection", "La redirection à échouée", MB_OK | MB_ICONERROR ) ; } // déjà, là, ça marche po : il n'arrive pas à rediriger la sortie, est-ce qu'il faut que je fasse un buffer plus grand ? /// --- avant l'appel de la fonction : sortieO[0] = '\0' ; sortieE[0] = '\0' ; // juste après l'appel de la fonction : if(sortieO[0] != '\0') MessageBox(NULL, sortieO, "info", MB_OK | MB_ICONINFORMATION | MB_APPLMODAL) ; if(sortieE[0] != '\0') MessageBox(NULL, sortieE, "Erreur", MB_OK | MB_ICONINFORMATION | MB_APPLMODAL) ; voilà. Il doit y avoir une connerie au niveau du buffer : faut-il qu'il soit plus gros ? faut-il faire un pointeur dessus ? est-ce que je suis vraiment trop con pour faire de l'info et est ce que je ferais pas mieux de faire vigile ? |
| El_gringo |
|
| seblamb | La doc papier (elle existe ?) et la doc CDROM sont de toute façon moins complète que le site msdn.microsoft.com ( qui a un très bon moteur de recherche).
Concernant ton problème : http://msdn.microsoft.com/library/ [...] r_8hbn.htm |
| *syl* | oui, on peut rediriger la sortie standard vers un buffer, il suffit de jouer avec les pipes... |
| Moustaaki | vi vi, c'est dll 32 consoles... j'ai dit DOS parceque personne ne répondait et je pensais que ça serait plus compréhensible. Apperement, non, alors, je réctifie : CE SONT DES DLL 32 CONSOLES !
pour ce qui est de la doc, j'ai du mal à trouver sur le net... j'ai pas la doc msdn (mon équipe n'a toujours pas commandé ou reçus visual) et j'ai donc que le net. La doc papier, j'en ai pas non plus ! c assez galère. |
| seblamb | Déja une dll Dos ça n'existe pas (enfin si mais c'est très très très rare), je pense que tu veux parler d'une DLL en mode console ( très différent).
On peut le faire, j'ai déja vu des API qui le permettent. Je pense qu'il faut se plonger dans le guide de référence de Win32 et rechercher les fonctions correspondant au mode console. |
| Moustaaki | on n e peut pas, donc .... ARGL |
| Moustaaki | JE fais une interface graphique autour de dll 32 console.
Ces dlls renvoie des messages d'erreurs sur la sortie standard et il faudrait que je récupère ces messages. Est-il possible de rediriger la sortie standard ou il y a-til un moyen de récupérer ces messages dans un buffer que j'enverrais sur une boite de dialogue ? REGARDER LE GROS POST DU BAS MARQUé ICI [edit]--Message édité par Moustaaki--[/edit] |


