Tại sao chương trình này hiển thị chính xác hộp thư nhưng không đặt mức lỗi?lý do tại sao không winmain đặt 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;
}
Tôi đã biên dịch mã ở trên thành tên thực thi có tên là a.exe. Tôi đã làm điều này trong dấu nhắc lệnh:
c:\> a.exe
(message box is displayed, I press ok)
c:\> echo %ERRORLEVEL%
0
tôi nhận được kết quả tương tự nếu tôi sử dụng exit(90);
ngay trước sự trở lại. Nó vẫn nói 0
.
Tôi cũng đã cố gắng bắt đầu chương trình qua CreateProcess
và nhận kết quả với GetExitCodeProcess
nhưng cũng trả về 0
cho tôi. Tôi đã kiểm tra lỗi để đảm bảo rằng tất cả đã được bắt đầu chính xác.
Ban đầu tôi thấy vấn đề này trong một chương trình phức tạp hơn vì vậy tôi đã thực hiện chương trình đơn giản này để xác minh sự cố. Kết quả giống nhau, cả hai chương trình có WinMain
luôn trả về 0
.
Tôi đã thử cả hai tùy chọn biên dịch x64, x86 và unicode và MBCS. Tất cả cung cấp cho 0
làm cấp độ lỗi/mã trạng thái.
thử nghiệm với winegcc và nó trả về 90 (thử nghiệm với $?) trên hệ thống của tôi. có lẽ một số vấn đề vỏ? –
Tôi đang sử dụng MSVC++ 2005 –
Tôi không nghĩ đó là vấn đề về trình bao vì tôi cũng đã bắt đầu quá trình từ một ứng dụng khác và sử dụng CreateProcess/WaitForSingleObject/GetExitCodeProcess –