诀窍在于您需要创建一个 Windows 应用程序而不是控制台应用程序。如何做到这一点最好用一个最小的示例应用程序来演示。
我们从设置内存模型开始。
.386
.model flat
然后我们包括windows.inc
它使我们能够访问 API 调用中可能需要的各种常量。如果您对 Windows API 做的不多,您可能不需要这个。
include windows.inc
接下来我们为要调用的函数添加外部。至少你需要打电话ExitProcess
。在此示例中,我们还将调用MessageBoxA
,以便我们可以看到应用程序执行某些操作。
extrn ExitProcess : near
extrn MessageBoxA : near
接下来是带有消息框的“Hello World”消息的数据段。
.data
hello db "Hello World!",0
最后是代码。它只是调用MessageBoxA
显示消息,然后ExitProcess
退出应用程序。
.code
start:
push MB_ICONHAND or MB_OKCANCEL
push offset hello
push offset hello
push 0
call MessageBoxA
push 0
call ExitProcess
end start
假设您已将此代码保存在文件wintest.asm中,然后您将使用以下命令行对其进行编译:
tasm32 /ml wintest.asm
该/ml
选项指定您要使用区分大小写的符号。否则,链接器将找不到 Windows 函数调用。
如果您收到有关无法找到windows.inc包含文件的错误消息,您可能还需要包含一个/i
带有 Borland 包含目录路径的选项。
最后,您链接到以下命令行:
ilink32 wintest.obj,,,import32.lib,,
这import32.lib
是一个将您的代码链接到 Windows API 的导入库。
假设一切都已成功编译和链接,您现在应该有一个名为wintest.exe的 Windows 应用程序,运行时会弹出一个消息框,但不会打开控制台窗口。