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

furax13 90 Messages postés mardi 28 octobre 2003Date d'inscription 24 avril 2008 Dernière intervention - 16 févr. 2006 à 10:43 - Dernière réponse : Cirec 4221 Messages postés vendredi 23 juillet 2004Date d'inscription 11 mai 2018 Dernière intervention
- 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

Cirec 4221 Messages postés vendredi 23 juillet 2004Date d'inscription 11 mai 2018 Dernière intervention - 16 févr. 2006 à 15:28
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
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.