¿Por qué este programa muestra correctamente un cuadro de mensaje, pero no establece el nivel de error?¿por qué winmain no establece el nivel de error?
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;
}
He compilado el código anterior al nombre de un ejecutable llamado a.exe. La hice esto en símbolo del sistema:
c:\> a.exe
(message box is displayed, I press ok)
c:\> echo %ERRORLEVEL%
0
consigo los mismos resultados si uso exit(90);
justo antes de la devolución. Todavía dice 0
.
También traté de iniciar el programa a través de CreateProcess
y obtener el resultado con GetExitCodeProcess
pero también me devuelve 0
. Hice una comprobación de errores para asegurarme de que todo comenzó correctamente.
Originalmente vi este problema en un programa más complejo, así que hice este sencillo programa para verificar el problema. Los resultados son los mismos, ambos programas que tienen WinMain
siempre devuelven 0
.
Intenté las opciones de compilación x64, x86 y Unicode y MBCS. Todos dan 0
como un código de nivel/estado de error.
probado con winegcc y devuelve 90 (probado con $?) en mi sistema. tal vez algún problema con el caparazón? –
Estoy usando MSVC++ 2005 –
No creo que sea un problema de shell porque también inicié el proceso desde otra aplicación y utilicé CreateProcess/WaitForSingleObject/GetExitCodeProcess –