OVH Cloud OVH Cloud

Thread

9 réponses
Avatar
Jean-François GAZET
Bonjour,

j'ai une appli Win32 écrite en C++ et une application MSDOS.
Je ne travaille en C++ que dans l'appli Win32.

J'ai besoin du code à inclure dans l'appli Win32 qui permet :
- De lancer l'EXE MSDOS
- De pouvoir écrire en STDIN au besoin
- De pouvoir "écouter" en permanence le STDOUT du prog MSDOS.
Le tout dans un "thread" pour ne pas bloquer l'appli principale.

Mais je ne m'en sort pas, merci de votre aide.

9 réponses

Avatar
Christian ASTOR
Jean-François GAZET wrote:

j'ai une appli Win32 écrite en C++ et une application MSDOS.
Je ne travaille en C++ que dans l'appli Win32.

J'ai besoin du code à inclure dans l'appli Win32 qui permet :
- De lancer l'EXE MSDOS
- De pouvoir écrire en STDIN au besoin
- De pouvoir "écouter" en permanence le STDOUT du prog MSDOS.



KB 190351 & consorts.
Avatar
DeadCow
"Jean-François GAZET" a écrit dans le message news:
3f47bf7a$0$2411$
Bonjour,

j'ai une appli Win32 écrite en C++ et une application MSDOS.
Je ne travaille en C++ que dans l'appli Win32.

J'ai besoin du code à inclure dans l'appli Win32 qui permet :
- De lancer l'EXE MSDOS
- De pouvoir écrire en STDIN au besoin
- De pouvoir "écouter" en permanence le STDOUT du prog MSDOS.
Le tout dans un "thread" pour ne pas bloquer l'appli principale.

Mais je ne m'en sort pas, merci de votre aide.



Voilà comment il faut proceder:

- Il te faut 2 ou 3 tubes de communication, selon que tu veut que le stdout
et le stderr soit sur le même tube. Tu peut créé ces tubes avec CreatePipe.
N'oublis pas dans SECURITY_ATTRIBUTES de mettre true à bInheritHandle quand
tu les créé. A chaque fois tu va récuperer 2 handle, un pour lire et un pour
écrire dans le tube.

- Maintenant que tu as les tubes, tu va utiliser CreateProcess pour créé ton
process externe.
La fonction CreateProcess prend en entrée une structure appelée STARTUPINFO.
Dans cette structure tu peut préciser des handles pour le stdout, stdin,
stderr pour le process que tu veut créé : tu va mettre ici les handle de tes
tubes. N'oublis pas que tu vas lire le stdout/stderr et que tu va écrire sur
le stdin donc place les bon handle.( ne pas oublier de mettre le flag
STARTF_USESTDHANDLES et de mettre le paramètre bInheritHandles de create
process sur true ).

Grosso modo ca fait ca :

+------+ +------+
| |-- stdin ->| |
|Parent|<- stdout --|Enfant|
| |<- stderr --| |
+------+ +------+

- Il te reste à gerer le fameux problème de deadlock car la lecture et
l'écriture dans un tube sont des opérations bloquantes, c'est à dire que si
l'appli parent est en train de lire dans le stdout et que l'appli enfant est
en train de lire le stdin la situation est bloquée.

Bonne chance et n'hésite pas à demander des précisions.

-- Nicolas Repiquet
Avatar
Dominique Vaufreydaz
Bonjour,

Est-ce que quelqu'un aurait 1 ou 2h pour m'écrire un code sur mesure ?



Rechercher la classe CRedirect sur http://www.codeguru.com/

Doms, de passage mais halluciné.
--
Impose ta chance, serre ton bonheur et va vers ton risque.
A te regarder, ils s'habitueront.
René Char, Les Matinaux.
----
http://www-prima.inrialpes.fr/Vaufreydaz/
http://slmg.imag.fr/
http://slmg-index.imag.fr/
http://TitchKaRa.free.fr/
http://logiciels.ntfaqfr.com/
Avatar
Patrick Philippot
Dominique Vaufreydaz wrote:
Doms, de passage mais halluciné.



Moi itou. Il y a des jours où je me demande si un farceur n'aurait pas
mis une capsule de LSD dans mon Bourgogne. Par moments, je m'interroge
sur l'avenir de mon job et là, je doute carrément. J'ai parfois du mal à
faire régler les factures mais finalement, ce type de contrat résout le
pb. Bon, ce n'est pas tout ça, j'ai un projet à terminer. Si quelqu'un a
une ou deux semaines à perdre pendant que je vais faire une petite
rando...

--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.xx
(remplacez .xx par .fr si vous répondez par e-mail)
Avatar
DeadCow
"Jean-François GAZET" a écrit dans le message news:
3f4d05c2$0$2411$

Personne ici n'a jamais écrit et diffusé du code gratuitement ? j'ai passé
des mois sur des projets gratuits que j'adaptais selon les demandes, alors
je pensais que quelqu'un pouvait m'aider sans que cela lui prenne plus


d'une
heure.
Je me suis trompé, désolé.

Mais ça ne résoud pas mon problème, j'ai besoin d'un code que je ne sais


pas
écrire, est-ce que quelqu'un peut m'aider si je le paye ?




C'est pas une question d'argent ne soit pas ridicule. Ton problême est
presque résolu. Tu sait maintenant comment lancer un programme externe en
redirigeant les entrée/sortie vers de application. Tout ce qu'il te reste à
trouver c'est comment faire des io non bloquant sur les tubes.

Y a beaucoup de monde ici qui donnent de leur temps pour aider ( la preuve
on répond au questions ) mais il faudrait pas donner l'impression qu'on fait
ton travail. La phrase qui cloche à mon avis c'est :

- je dois pouvoir intégrer les fichiers CPP à mon projet, compiler et ça
marche :-))



... ça fait un peu comme si tu passait commande tu voit ce que je veut dire
?

Enfin bon pour en revenir à ton problême, je pense qu'il suffirai pour ça
que tu créé un nouveau thread qui attend qu'une action soit possible
lecture ou écriture ). Je suis pas expert ( donc c'est pas sur que ça
marche ) mais je suppose que tu doit pouvoir créer des Events avec
CreateEvent, ensuite tu les met dans la structure OVERLAPPED que tu passe a
WriteFile et ReadFile, ensuite tu fait un WaitForMultipleObject avec tes
deux event, et quand ça se déclenche, tu envoi un message que tu as défini à
ton thread principal. Quand les event on été remis à la main, ben tu
reboucle jusqu'a ce que l'application que tu as lancer se termine.

Voilà si quelqu'un d'autre peut confirmer car je ne suis pas sur ( et la
réponse m'interesse maintenant =)

-- Nicolas Repiquet
Avatar
Patrick Philippot
Jean-François GAZET wrote:
Je me suis trompé, désolé.



Moi aussi. Personne n'a rien contre les initiatives de développement non
rémunérées et les projets de groupe. Là n'est pas la question. Et il
m'arrive également de passer du temps à titre grâcieux sur la résolution
de problèmes qui ne me concernent pas directement. Disons que cela fait
partie de mon budget formation.

Je pense qu'en l'occurence, ce qui a provoqué ma réaction légèrement
acerbe est plutôt une question de formulation. Une expression un rien
abrupte de votre part... Relisez vous. Vous ne précisez pas s'il s'agit
d'un besoin professionnel ou personnel, vous expliquez que le travail
est fait à 90% (et vous noterez que la réponse technique vous a été
donnée), vous listez vos exigences concernant les 10% qui restent ainsi
que votre adresse e-mail (et si quelqu'un remplit le cahier des charges
en 2 heures, tests et remise du code au donneur d'ordre compris,
félicitations) et vous vous attendez à ce que cela déclenche une grosse
motivation? Sans même un petit "merci d'avance" ou un petit mot
d'encouragement? Même les clients qui me rémunèrent s'expriment de
manière plus délicate.

Désolé si je me montre un rien susceptible mais depuis quelques temps,
je constate un changement de moeurs. Il y a quelques années, je recevais
des e-mails me sollicitant pour des conseils techniques. Depuis quelques
temps, je reçois carrément des cahier des charges. Ce n'est plus "aidez
moi à faire mon travail", c'est "pourriez vous faire ce travail à ma
place?".

Je suis d'un naturel extrêmement patient, courtois et serein (aucun
mérite, j'ai été élevé comme ça). Mais de temps en temps, une goutte
d'eau provoque de ma part un léger tressaillement ou quelques remarques
ironiques... Désolé que cela soit tombé sur vous.

Allez, 90% du travail est fait, vous avez eu des infos techniques de
qualité et vous disposez du MSDN et d'Internet. Nul doute qu'avec un peu
de patience et de ténacité, vous allez finir ce job tout seul. Et vous
aurez la satisfaction d'avoir appris quelque chose par vous même.

Bon courage.

--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.xx
(remplacez .xx par .fr si vous répondez par e-mail)
Avatar
Dominique Vaufreydaz
Bonjour,

Personne ici n'a jamais écrit et diffusé du code gratuitement ? j'ai passé
des mois sur des projets gratuits que j'adaptais selon les demandes, alors
je pensais que quelqu'un pouvait m'aider sans que cela lui prenne plus d'une
heure.
Je me suis trompé, désolé.



Ne dis pas, y'a qqun qui ferait mon boulot en 2h pour moi !
Je t'ai dit de telecharger la classe CRedirect sur http://www.codeguru.com/
Ca fait *exactement* ce que tu veux !

Mais ça ne résoud pas mon problème, j'ai besoin d'un code que je ne sais pas
écrire, est-ce que quelqu'un peut m'aider si je le paye ?



Pourquoi payer alors que le code est dispo gratuitement sur le Web...

Doms, de passage encore, mes vacances ressemble de plus en plus
a du travail !
--
Impose ta chance, serre ton bonheur et va vers ton risque.
A te regarder, ils s'habitueront.
René Char, Les Matinaux.
----
http://www-prima.inrialpes.fr/Vaufreydaz/
http://slmg.imag.fr/
http://slmg-index.imag.fr/
http://TitchKaRa.free.fr/
http://logiciels.ntfaqfr.com/
Avatar
Jean-François GAZET
> Je t'ai dit de telecharger la classe CRedirect sur


http://www.codeguru.com/
Ca fait *exactement* ce que tu veux !



Merci mais je ne l'ai pas trouvé.

Excusez-moi si mon premier post était un peu trop direct, mais quand je
n'arrive pas à programmer ce que je veux, ça m'énerve un peu. De plus, je ne
suis pas diplomate, je préfère être clair et précis, et du coup, c'est vrai
que quand je me relis, ça donne pas envie de m'aider.

Maintenant, je vais m'en sortir avec toutes vos infos, c'est tout bon.
Merci.
Avatar
DeadCow
"Jean-François GAZET" a écrit dans le message news:
3f4de0e4$0$280$
> Je t'ai dit de telecharger la classe CRedirect sur
http://www.codeguru.com/
> Ca fait *exactement* ce que tu veux !

Merci mais je ne l'ai pas trouvé.



http://codeguru.earthweb.com/console/QuickWin.shtml

Tu télécharges les sources, et c'est la classe CRedirect.

-- Nicolas Repiquet