이 프로그램이 메시지 상자를 올바르게 표시하지만 오류 수준을 설정하지 않는 이유는 무엇입니까?왜 winmain이 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;
}
위의 코드를 a.exe라는 실행 파일 이름으로 컴파일했습니다. 의 I는 명령 프롬프트에서 이런 짓을 : 바로 반환하기 전에 exit(90);
를 사용하는 경우
c:\> a.exe
(message box is displayed, I press ok)
c:\> echo %ERRORLEVEL%
0
나는 같은 결과를 얻을 수 있습니다. 여전히
0
라고합니다.
CreateProcess
을 통해 프로그램을 시작하고 GetExitCodeProcess
으로 결과를 얻으려고 시도했지만 나에게 0
을 반환합니다. 모든 오류가 올바르게 시작되었는지 확인하기 위해 오류 검사를 수행했습니다.
나는 더 복잡한 프로그램에서이 문제를 처음 보았으므로이 간단한 프로그램을 사용하여 문제를 확인했습니다. 결과는 같습니다. WinMain
인 프로그램은 항상 0
을 반환합니다.
x64, x86 및 유니 코드 및 MBCS 컴파일 옵션 모두를 시도했습니다. 모두는 0
에 오류 수준/상태 코드를 제공합니다.
이 winegcc과 테스트를 내 시스템에서 90을 반환합니다 ($?로 테스트 됨). 쉘 문제일까요? –
MSVC++ 2005를 사용하고 있습니다. –
다른 응용 프로그램에서 프로세스를 시작하고 CreateProcess/WaitForSingleObject/GetExitCodeProcess를 사용했기 때문에 쉘 문제가 아닌 것 같습니다. –