2013-03-20 53 views
2

我正在尝试使用Win32 API在程序集中编写一个简单的命令行程序。我写了以下内容,编译并链接了零错误或警告,并从命令行启动它,但在命令提示符处没有任何内容出现。任何人都可以看到什么是错的,或者什么会让它说“Hello World!”在命令行?该程序:Win32 ASM程序不向命令行输出任何内容

; Block 1 
.386 
.model flat,stdcall 
option casemap:none 

; Block 2 
include windows.inc 
include user32.inc 
includelib user32.lib 
include kernel32.inc 
includelib kernel32.lib 

; Block 3 
.data 
szMsg db "Hello World!",0 
nNumToWrite dd 12 

; Block 4 
.data? 
numwritten dd ? 
CommandLine LPSTR ? 

; Block 5 
.code 
start: 
invoke GetCommandLine 
mov CommandLine,eax 
invoke WriteConsole,CommandLine,addr szMsg,nNumToWrite,numwritten,NULL 
xor eax,eax 
invoke ExitProcess,eax 
end start 
+1

你试过调试吗?你发现了什么? – tenfour 2013-03-20 16:45:35

+1

你传递给'WriteConsole'的参数是错误的。第一个参数应该是控制台输出缓冲区的句柄,第四个参数应该是指向写入的字符数量的指针(您正在传递值)。 – user786653 2013-03-20 17:02:29

+0

我将该行更改为'调用WriteConsole,STD_OUTPUT_HANDLE,addr szMsg,nNumToWrite,addr numwritten,NULL'但仍然没有快乐。 – mring 2013-03-20 17:19:30

回答

1

您是否将其作为控制台程序或GUI程序链接?这是Win32中可执行文件的属性。

+0

我正在使用WinAsm。创建项目时,我确实将该项目作为标准EXE。我尝试在WinAsm中创建一个新项目,并选择Console Application作为项目类型并使用相同的代码构建,以获得相同的结果。 – mring 2013-03-20 18:18:41