Вопрос

Простите, что я новичок в 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 примерно так:

TARGETNAME=test
TARGETTYPE=PROGRAM
TARGETPATH=obj

TARGETLIBS=$(SDK_LIB_PATH)\kernel32.lib 

SOURCES= test.cpp

И makefile , например:

#
# DO NOT EDIT THIS FILE!!!  Edit .\sources. if you want to add a new source
# file to this component.  This file merely indirects to the real make file
# that is shared by all the components of Windows
#
!INCLUDE $(NTMAKEENV)\makefile.def

После запуска среды бесплатной сборки Windows XP я перехожу в каталог с тремя файлами (test.cpp, makefile и sources) и запускаю следующую команду:

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

Какие выходы:

BUILD: Adding /Y to COPYCMD so xcopy ops won't hang.
BUILD: Using 2 child processes
BUILD: Object root set to: ==> objfre_wxp_x86
BUILD: Compile and Link for i386
BUILD: Examining f:\temp\debug\dir1 directory for files to compile.
BUILD: Compiling (NoSync) f:\temp\debug\dir1 directory
1>Compiling - test.cpp for i386
BUILD: Compiling  f:\temp\debug\dir1 directory
BUILD: Linking f:\temp\debug\dir1 directory
1>Linking Executable - objfre_wxp_x86\i386\test.exe for i386
BUILD: Done

    2 files compiled
    1 executable built

Проблема в том, что когда я запускаю созданный исполняемый файл test.exe , он говорит:

F:\temp\debug\dir1\objfre_wxp_x86\i386>test
The F:\temp\debug\dir1\objfre_wxp_x86\i386\test.exe application cannot be run in Win32 mode.

Что мне здесь не хватает?

Это было полезно?

Решение

Роб Уокер объясняет почему, но Ядро горчицы объясняет как.

Другие советы

Вы скомпилировали «родное приложение», а не win32. Определение TARGET_TYPE управляет этим.

См. Inside Native Applications 'для обсуждения использования DDK для создания собственного приложения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top