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ようなファイルを作成しました。

TARGETNAME=テスト
TARGETTYPE=プログラム
TARGETPATH=obj

TARGETLIBS=$(SDK_LIB_PATH)\kernel32.lib

ソース= test.cpp

そして、makefileこのような:

#
# このファイルは編集しないでください!!! .\sources を編集します。新しいソースを追加したい場合
# ファイルをこのコンポーネントに追加します。このファイルは、実際のメイク ファイルを間接的に参照するだけです。
# Windows のすべてのコンポーネントで共有される
#
!INCLUDE $(NTMAKEENV)\makefile.def

Windows XP Free Build Environment を起動した後、3 つのファイル (test.cpp、makefile、およびソース) を含むディレクトリを参照し、次のコマンドを実行します。

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

どの出力:

ビルド: /Y を COPYCMD に追加して、xcopy ops がハングしないようにします。
ビルド: 2 つの子プロセスを使用する
ビルド: オブジェクト ルートを次のように設定: ==> objfre_wxp_x86
ビルド: i386 用のコンパイルとリンク
ビルド: コンパイルするファイルの f:\temp\debug\dir1 ディレクトリを調べています。
ビルド: コンパイル (NoSync) f:\temp\debug\dir1 ディレクトリ
1>コンパイル - i386 用の test.cpp
ビルド: f:\temp\debug\dir1 ディレクトリをコンパイルしています
ビルド: f:\temp\debug\dir1 ディレクトリをリンクしています
1>実行可能ファイルのリンク - objfre_wxp_x86\i386\test.exe for i386
ビルド: 完了

    コンパイルされた 2 つのファイル
    1 つの実行可能ファイルがビルドされました

問題は、作成した実行可能ファイルを実行すると、次のように表示さtest.exeれることです。

F:\temp\debug\dir1\objfre_wxp_x86\i386>テスト
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が理由を説明しますが、KernelMustardがその方法を説明します。

于 2008-10-22T19:15:56.537 に答える