0

チュートリアルアセンブリプログラムの終了コードを取得したい(masm32とリンクを使用)。正常に機能%errorlevel%していました。echoと入力すると、後に入力した終了コードが表示されinvoke ExitProcessます。今ではもう動作しません。OpenSuse 12.1ホストでVirtualBoxを使用し、ゲストとしてWindows VistaHomePremiumを使用しています。答えを探しましたが、足りませんでした。ほとんどの苦情はバッチファイルの使用に関するものですが、これは私がやろうとしていることではありません。これが簡単なプログラムです

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

これにより、プロセスが終了するまでコマンド シェルが待機し、終了コードを取得できるようになります。

(バッチファイルを使用している場合は、これを行う必要はありません。)

于 2012-03-15T23:52:31.467 に答える