Récupérer le code retour d'un exe lancer par CreateProcess [Résolu]

Messages postés
90
Date d'inscription
mardi 28 octobre 2003
Dernière intervention
24 avril 2008
- 16 févr. 2006 à 10:43 - Dernière réponse :
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 16 févr. 2006 à 15:28
bonjour,
depuis une application Delphi, je lance un exécutable C++avec un fichier de données comme paramètr. Cet exe C++ retourne un entier qui permet de savoir si l'exécution s'est bien déroulée ou non (-1 : OK, sinon un nombre entier )

J'aimerais récupérer ce code retour dans mon code delphi pour traiter ensuite les erreurs potentielles.

comment faire?

merci beaucoup

CI-joint mon code delphi :
var
{ Variables liées à l'exécution d'un exécutable externe }
StartInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
Fin: Boolean;
processALancer: string;


lpExitCode: Longword;
{Fin Variables liées à l'exécution d'un exécutable externe }

begin
...
{ Mise à zéro de la structure StartInfo }
FillChar(StartInfo, SizeOf(StartInfo), #0);


{ Seule la taille est renseignée, toutes les autres options }
{ laissées à zéro prendront les valeurs par défaut }
StartInfo.cb := SizeOf(StartInfo);


processALancer := nomPathExe + nomModelExe + ' ' + nomFichierSelectionne;

{ Permet de cacher l'application externe appelée}
StartInfo.dwFlags:=STARTF_USESHOWWINDOW;
StartInfo.wShowWindow:=SW_HIDE;

{ Lancement de la ligne de commande }
if CreateProcess(nil, PAnsiChar(processALancer), nil, nil, False,
0, nil, nil, StartInfo, ProcessInfo) then
begin
// L'application est bien lancée, on va en attendre la fin
// ProcessInfo.hProcess contient le handle du process principal de l'application
Fin := False;
repeat
// On attend la fin de l'application
case WaitForSingleObject(ProcessInfo.hProcess, 200) of
WAIT_OBJECT_0: Fin := True; // L'application est terminée, on sort
WAIT_TIMEOUT: ; // elle n'est pas terminée, on continue d'attendre
end;
// Mise à jour de la fenêtre pour que l'application ne paraisse pas bloquée.
Application.ProcessMessages;
until Fin;
end
else RaiseLastOSError;
end;
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 16 févr. 2006 à 15:28
3
Merci
Salut,
j'ai fait quelques testes et voici ce que j'ai trouvé :

Var lpExitCode : Cardinal

WaitForSingleObject(ProcessInformation.hProcess, INFINITE);
// avant de refermer les handles ce que normalement tu devrais faire
// tu utilises la fonction GetExitCodeProcess
GetExitCodeProcess(ProcessInformation.hProcess, lpExitCode);
CloseHandle( ProcessInformation.hProcess );
CloseHandle( ProcessInformation.hThread );
// exemple pour afficher le résultat
Form1.Label1.Caption := IntToStr(lpExitCode);

j'ai fait un prog que je termine soit par halt(0) où halt(1) où halt(2) et j'ai à chaques fois j'ai récuperé le code de sortie.
Mais avec un code de sortie = à -1 je ne sais pas si ça fonctionne puisque halt n'accepte que des valeurs positives

@+
Cirec

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de Cirec

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.