与Windows DDK编译时出错

原谅我与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生成本机应用程序的讨论,请参阅“ 内部本机应用程序 ”。