0

我想获得我的教程汇编程序的退出代码(使用 masm32 和链接)。它工作正常,我会输入 echo %errorlevel%,它会显示我在之后输入的退出代码invoke ExitProcess。现在它不再起作用了。我在 OpenSuse 12.1 主机和 Windows Vista Home Premium 上使用 VirtualBox 作为来宾。我一直在寻找答案,但没有找到答案。大多数抱怨都是关于使用批处理文件,这不是我想要做的。这是简单的程序

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程序的退出代码在哪里?任何信息都非常感谢。

4

2 回答 2

5

如果您的子系统是 Windows,那么命令处理器会立即返回命令提示符,而无需等待程序退出。(例如尝试一下notepad。)由于尚未发明时间旅行,它无法告诉您程序的退出代码是什么,因为程序还没有退出。

于 2012-03-13T20:56:08.997 回答
0

启动这样的过程:

start /wait helloworld

这将使命令 shell 等待进程完成,以便它可以检索退出代码。

(如果您使用的是批处理文件,则不需要这样做。)

于 2012-03-15T23:52:31.467 回答