Как получить код выхода через% errorlevel%, он больше не работает с программой сборки - PullRequest
0 голосов
/ 14 марта 2012

Я хочу получить код выхода моей учебной программы сборки (используя masm32 и ссылку). Это работало нормально, я набирал echo %errorlevel% и отображал мой код выхода, который я набрал после invoke ExitProcess. Теперь это больше не работает. Я использую VirtualBox на хосте OpenSuse 12.1 и Windows Vista Home Premium в качестве гостя. Я искал ответы, но потерпел неудачу. Большинство жалоб касаются использования командного файла, а это не то, что я пытаюсь сделать. Вот простая программа

hello_world.asm

.586
.model flat, stdcall
option casemap :none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib

.data
HelloWorld  db  "Hello World!", 0
.code
start:
invoke MessageBox, NULL, addr HelloWorld, addr HelloWorld, MB_OK
invoke ExitProcess, 2

end start

Я ожидаю, что он вернет 2, но echo %errorlevel% вернет 0. Есть что-то, что я пропускаю? Спасибо, и я прошу прощения, на этот вопрос ответили до смерти. Я просто не могу найти свой ответ.

Редактировать : На самом деле, я нашел часть своего ответа. Это работает, только если я использую ссылку /SUBSYSTEM:CONSOLE. Использование /SUBSYSTEM:WINDOWS всегда возвращает 0. Я не знаю, что с этим делать. где код выхода с программой Windows? любая информация с благодарностью.

Ответы [ 2 ]

5 голосов
/ 14 марта 2012

Если вашей подсистемой является Windows, то командный процессор немедленно возвращается в командную строку, не дожидаясь выхода из программы. (Попробуйте, например, с notepad.) Поскольку путешествие во времени еще не было изобретено, оно не может сказать вам, каков код выхода программы, так как программа еще не вышла.

0 голосов
/ 16 марта 2012

Запустите процесс следующим образом:

start /wait helloworld

Это заставит командную оболочку ждать завершения процесса, чтобы он мог получить код выхода.

(Вы неЭто нужно сделать, если вы используете командный файл.)

...