1

请原谅我是一个完整的 Windows DDK 新手。

我创建了一个名为的简单文件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;
}

在同一个目录中,我创建了一个sources像这样的文件:

目标名称=测试
目标类型=程序
目标路径=obj

TARGETLIBS=$(SDK_LIB_PATH)\kernel32.lib

来源= test.cpp

makefile这样:

#
# 不要编辑这个文件!!!编辑 .\sources. 如果你想添加一个新的来源
# 文件到这个组件。这个文件只是间接到真正的 make 文件
# 由 Windows 的所有组件共享
#
!包括 $(NTMAKEENV)\makefile.def

启动 Windows XP Free Build Environment 后,我​​浏览到包含三个文件(test.cpp、makefile 和源)的目录并运行以下命令:

F:\temp\debug\dir1>build -cZg

哪个输出:

构建:将 /Y 添加到 COPYCMD,这样 xcopy 操作就不会挂起。
BUILD:使用 2 个子进程
构建:对象根设置为:==> objfre_wxp_x86
构建:为 i386 编译和链接
BUILD:检查 f:\temp\debug\dir1 目录中要编译的文件。
构建:编译 (NoSync) f:\temp\debug\dir1 目录
1>编译-i386的test.cpp
构建:编译 f:\temp\debug\dir1 目录
构建:链接 f:\temp\debug\dir1 目录
1>链接可执行文件 - i386 的 objfre_wxp_x86\i386\test.exe
构建:完成

    2个文件编译
    构建了 1 个可执行文件

问题是当我运行创建的可执行文件test.exe时它说:

F:\temp\debug\dir1\objfre_wxp_x86\i386>test
F:\temp\debug\dir1\objfre_wxp_x86\i386\test.exe 应用程序无法在 Win32 模式下运行。

我在这里想念什么?

4

2 回答 2

3

您已经编译了一个“本机应用程序”而不是一个 win32 应用程序。TARGET_TYPE 定义控制这一点。

有关使用 DDK 生成原生应用程序的讨论,请参阅“内部原生应用程序”。

于 2008-10-22T18:17:04.957 回答
2

Rob Walker解释了原因,但Kernel Mustard解释了方法。

于 2008-10-22T19:15:56.537 回答