2
.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

执行此程序后没有任何反应。为什么没有出现控制台窗口?

后记

组装选项(winAsm):

/Zi /Zd /c /coff /Cp /nologo

链接器选项

/SUBSYSTEM:WINDOWS /DEBUG /DEBUGTYPE:CV /VERSION:4.0 /INCREMENTAL:NO

4

1 回答 1

3
/SUBSYSTEM:WINDOWS

现在可以回答了。这是错误的选项,它声明该程序是本机 Windows 程序。它负责使用 CreateWindow() api 函数创建自己的窗口。您当然也可以从汇编程序中调用它,只是通常不这样做。您至少要使用 C 编译器来完成创建窗口类和正确编写窗口过程的繁琐工作。就像 Petzold 在他开创性的“Programming Windows”一书中向我们展示的那样。

如果您希望 Windows 为您创建一个控制台窗口,那么您必须要求它:

/SUBSYSTEM:CONSOLE
于 2012-06-13T21:28:05.850 回答