Perché questo programma visualizza correttamente una finestra di messaggio, ma non imposta il livello di errore?perché non winmain imposta il errorlevel?
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
MessageBox(NULL, _T("This should return 90 no?"), _T("OK"), MB_OK);
return 90;
}
Ho compilato il codice sopra al nome un eseguibile chiamato a.exe. L'ho fatto nel prompt dei comandi:
c:\> a.exe
(message box is displayed, I press ok)
c:\> echo %ERRORLEVEL%
0
ottengo gli stessi risultati se uso exit(90);
destra prima del ritorno. Dice ancora 0
.
Ho anche provato ad avviare il programma tramite CreateProcess
e ottenere il risultato con GetExitCodeProcess
ma restituisce anche 0
per me. Ho fatto un controllo degli errori per assicurarmi che tutto fosse iniziato correttamente.
Originariamente ho visto questo problema in un programma più complesso, quindi ho creato questo semplice programma per verificare il problema. I risultati sono gli stessi, entrambi i programmi che hanno WinMain
restituiscono sempre 0
.
Ho provato entrambe le opzioni di compilazione x64, x86 e unicode e MBCS. Tutti danno 0
come un livello di errore/codice di stato.
testati con winegcc e restituisce 90 (testato con $?) sul mio sistema. forse qualche problema di shell? –
Sto utilizzando MSVC++ 2005 –
Non penso che sia un problema di shell perché ho anche avviato il processo da un'altra app e ho utilizzato CreateProcess/WaitForSingleObject/GetExitCodeProcess –