Seeker's Memo

個人的で技術的かもしれないメモがメインのブログです。http://seekers.hatenablog.jp/about

DirectX-SDK with C/C++(x64)開発境構築(VC++2010 Express) Windows 7-x64とかで

初心者向けなんだかなんだかよくわからない、VC++とDirectXSDKとWindowsSDKのx64開発環境構築を目指すという内容の記事です。
いきなりVC++でDX11かつx64なプログラム書こうとする猛者がいるとは思えないし、”普通”ならこの辺のノウハウも知ってそうだけど。

まあざっくり。

1. VisualC++ 2010 Express(まとめてVB,C#とかも入れておくといい)をDLして導入する
2. DirectXSDK(2010 June以降か?)をDLしてインストール
3. Windows SDKをDLしてインストール
4. VS2010のサービスパックをDLして当てる
5. コンパイラが削除されてしまう不具合を修正する修正ファイルをどこかから入手して当てる(MS公式サイト)
6. それぞれのライセンスを(以後とりあえず継続して無料で使えるので)レジストする。

2~5の順番はどうだったかなぁ・・・、まあドキュメント英語だけどしっかり読んで正しい順番でインストールするよ~に。

ともかく、Windows SDKx64対応プロンプトがスタートメニューに登録されていて、それが起動後にsetenv.cmdを打って後から変更でき、適当に書いた”ヘローワールド”がコンパイル+ビルド(cl.exe使用)&実行確認できればOK。
x64にしてビルドしたものがx64なバイナリになってるかどうか確かめたければ、対象バイナリをダンプしてheaderを確認しx64x86-64があれば(× x86)。MingWでもVC++でもバイナリダンプツール付属してるので。

んで、IDEの方の設定。
※プロパティシートをいじればどのC/C++プロジェクトに対しても同じ設定をデフォルトで適用できるみたいなんだけど、やり方知らないからスルーする。

とりあえず、慣れた手つきでささっとビルドしたいプロジェクト(ソリューション)を作成します。
プロジェクトを右クリして、
ビルド成果物をx64にしかしない前提なら、
・"Win32"の構成をベースに"x64"の構成を作成。
これからいじる内容のプロジェクトプロパティと現在ビルド構成が"x64"となっていることを確認して、
C/C++の追加のインクルードディレクトリにでも、「$(DX_SDK)include」と追加しておく
・「リンカ」の追加のライブラリファイル当たりにでも「$(DX_SDK)\Lib\x64」(間違ってたら$DX_SDKの場所確認して開いてみればわかる)を追加しておく
・ツールセットの項目を探して、「vc100」(多分……)から「WindowsSDK7.1」(筆者の場合これだった)にしておく

適当なhelloプログラムをプロジェクトに追加して、ビルド&実行してみる。(x64バイナリであることを確認しておくといい)


DirectX11なら

#include <d3dx11.h>
#pragma comment(lib,"d3d11.lib")
#pragma comment(lib,"d3dx11.lib")

ソースコードの冒頭に追加しておく。
DirectXのプログラミングについての詳細とか、WindowsSDKベースかMFCベースのウィンドウプログラミングの話の詳細は端折る。
そして、おもむろに割と整理されたみたいだがめんどくさいし時代の流れについていけない悲しみを背負いつつDirectX11グラフィック処理ウィンドウ初期化&表示プログラムを書いてビルド&実行。


動いた?

あとはまあ、適当に書きたいDirectX利用(9~11当たりの)プログラム書きゃいい。

【チェックポイント】
・せっかくのVC++なので、UNICODEでビルドするようにしよう。もちろんして相応の関数や型を使う。まあファイル操作関係がめんどくなりそうだが。
・最適化したければ、一応最適化できるみたいだが・・・。ついでにSSE2までなら適用できるみたい。
・MSVCランタイムDLLを使いたくなければ、MTd(デバッグビルド時)やMT(リリースビルド時)を指定。


コンソールからやりたければ、
WindowsSDK専用(x64対応)プロンプト開いて、
$ cl hogehoge.cpp
とでもやれば(単一ソースファイルからのexeを作ることは)できる。(分割ビルドとか、.libとか.dllもまあソースコードとオプション指定とかコマンドの扱い方次第で統合環境と同じように作れる)
makefileつかたければ、nmake.exeある。たぶん書式はあまり変わらんと思うんだがどうだか。
コンパイルオプション・リンカオプションをきちんと調べつつ、文字量がエグいことになるが。
UNICODEフラグとか使用ランタイム指定とかデバッグフラグとか色々。
ちなみに、C#コンパイラとかも実は使える。csc.exeだっけか?

Releaseとか、x86、XP以降対応に変更したければ、
そのプロンプトから、
$ setenv.cmd /Release /x86 /XP
みたいにやればおk。

※ちなみにここらへんまでやれば「Ruby」とかのソースコードを落としてきて、プロンプトから自家ビルドしてx64版を作ることも可能。DirectXらへんの設定はすっ飛ばしても。

自分で書いたプログラムソースをコマンドラインからビルドする前提なら、
そのソースコードに#pragma comment(lib, "kernel32")とかその他もろもろIDEがやってくれてた設定を書かねばならない。
ソースに書かないなら、コマンドラインオプションでいちいち全て書かないとダメ。