.386
.model flat, stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
includelib user32.lib
includelib kernel32.lib
Main proto
.data
hOutput dd 0
bReadWritten dd 0
szText1 db "What's your name?",0
hInput dd 0
szInput db 128 dup(0)
.data?
.code
start:
Invoke Main
Invoke ExitProcess,0
Main proc
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov hOutput, eax
invoke GetStdHandle,STD_INPUT_HANDLE
mov hInput, eax
invoke lstrlen, addr szText1
invoke WriteFile, hOutput, addr szText1, eax, ADDR bReadWritten, NULL
invoke ReadFile, hInput, addr szInput, 128, ADDR bReadWritten,0
ret
Main endp
end start
执行此程序后没有任何反应。为什么控制台窗口没有出现?
Postscriptum
汇编选项(winAsm):
/ Zi / Zd / c / coff / Cp / nologo
链接器选项
/ SUBSYSTEM:WINDOWS / DEBUG / DEBUGTYPE:CV /VERSION:4.0 / INCREMENTAL:NO
答案 0 :(得分:3)
/SUBSYSTEM:WINDOWS
现在它是负责任的。这是错误的选项,声明程序是本机Windows程序。使用CreateWindow()api函数负责创建自己的窗口。你当然也可以从装配程序中调用,但这并不常见。您至少使用C编译器来完成创建窗口类并正确编写窗口过程的严格要求。就像Petzold在他的开创性“编程Windows”一书中向我们展示的那样。
如果您希望Windows为您创建一个控制台窗口,那么您必须要求它:
/SUBSYSTEM:CONSOLE