原谅我与Windows DDK是一个完整的新手。
我创build了一个名为test.cpp
的简单文件:
#include <windows.h> #define BAD_ADDRESS 0xBAADF00D int __cdecl main(int argc, char* args[]) { char* p =(char*)BAD_ADDRESS; *p='A'; return 0; }
在同一个目录中,我创build了一个像这样的sources
文件:
TARGETNAME =testing TARGETTYPE = PROGRAM TARGETPATH = OBJ TARGETLIBS = $(SDK_LIB_PATH)\ KERNEL32.LIB SOURCES = test.cpp
和一个像这样的makefile
:
# #不要编辑这个文件! 编辑。\ sources。 如果你想添加一个新的来源 #文件到这个组件。 这个文件只是指向真正的make文件 #由Windows的所有组件共享 # !包括$(NTMAKEENV)\ makefile.def
启动Windows XP Free Build Environment后,我浏览到带有三个文件(test.cpp,makefile和sources)的目录并运行以下命令:
F:\ temp \ debug \ dir1> build -cZg
哪些产出:
BUILD:向COPYCMD添加/ Y,以便xcopy操作不会挂起。 BUILD:使用2个subprocess BUILD:对象根目录设置为:==> objfre_wxp_x86 编译:为i386编译和链接 BUILD:检查f:\ temp \ debug \ dir1目录中的文件进行编译。 BUILD:编译(NoSync)f:\ temp \ debug \ dir1目录 1>编译 - test.cpp for i386 编译:编译f:\ temp \ debug \ dir1目录 BUILD:链接f:\ temp \ debug \ dir1目录 1>链接可执行文件 - objfre_wxp_x86 \ i386 \ test.exe for i386 BUILD:完成 2个文件编译 1可执行内置
问题是,当我运行创build的可执行文件test.exe
它说:
F:\ TEMP \debugging\ DIR1 \ objfre_wxp_x86 \ I386>testing F:\ temp \ debug \ dir1 \ objfre_wxp_x86 \ i386 \ test.exe应用程序不能在Win32模式下运行。
我在这里错过了什么?
罗布·沃克解释了为什么,但内核芥末解释如何。
你已经编译了一个“原生应用程序”,而不是一个win32的。 TARGET_TYPE定义控制着这个。
有关使用DDK生成本机应用程序的讨论,请参阅“ 内部本机应用程序 ”。