Exec command sous visual

Yop,

J’ai besoin, dans mon code C++ sous visual studio, d’appeler une appli Win32 se trouvant sur mon disque et d’en récupérer la sortie pour poursuivre mon programme. Apparement je dois utiliser la fonction Exec mais j’ai un défaut de syntaxe sur mon programme. Quelqu’un sait comment l’appeler et quels sont les paramètres à passer?

Merki

Si je me souviens bien la déclaration c’est un truc du genre

avec path le chemin de l’appli (du genre c:\app.exe), arg0 le nom de l’appli, arg1 le première argument …
Et il faut toujours mettre NULL en dernier argument de execl.

Le header à inclure doit être process.h avec visual, et unistd.h sous linux.

Non tu dois utiliser CreateProcess… par execl… Si tu veux obtenir la sortie, il te suffit de specifier hStdOutput vers un fichier dans le STARTUPINFO. Oublie execl.

Ahhh, la sortie comme “Hello, World!”, pas le return 42 qui traine à la fin. Effectivement execl risque d’être un peu léger pour ça (et je ne sais pas du tout comment marche le recouvrement de processus sous windows).

Je reprends le code que j’ai posté dans l’autre thread

[code]PROCESS_INFORMATION pi;
STARTUPINFO si;

::ZeroMemory(&pi, sizeof(pi));
::ZeroMemory(&si, sizeof(si));
si.cb = sizeof(STARTUPINFO);

// prendre la sortie
si.hStdOutput = ::CreateFile(… ) // ta sortie

// on dit “wé on veut trop l’hériter lol c coule”
::SetHandleInformation(si.hStdOutput, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT);

BOOL bResult = ::CreateProcessW(NULL,
L"process.exe",
NULL,
NULL,
TRUE, // héritage des handles (important)
0,
NULL,
NULL,
&si,
&pi);

// nous on s’en fout maintenant du handle (oui non dépend des programmes)
::CloseHandle(si.hStdOutput);

if (bResult == TRUE)
{
::CloseHandle(pi.hProcess);
::CloseHandle(pi.hThread);
ZeroMemory(&pi, sizeof(pi));
}[/code]

Attention à bien fermer tous tes handles. Comme tu peux le voir c’est très simple et très souple vu que ton handle peut être ce que tu veux.