こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

DirectX9SDKが入ってるPCでDirectX8プログラミング

現在DirectX9.0SDKが入っています。
時々DirectXのサンプルで7や8のものもあり、それらを9でコンパイルしたいときは
どうしたら良いのでしょうか?
コンパイルするとd3dx8.hが見つかりませんなどと出てきます。

最初は関数名や型で8がつくものを9に強引に置き換えていましたが、
関数や定義によっては8から9にかけて削除されたものや仕様が変わってしまったものも
多く、これは労力がかかりすぎると思いあきらめました。

8.0のSDKを探してきてダウンロードし、VisualStudioの設定でできる
インクルードファイルの位置を9.0から8.0のファイルパスに置き換えるしかないのでしょうか?

投稿日時 - 2009-02-16 11:55:46

QNo.4722109

暇なときに回答ください

質問者が選んだベストアンサー

DirectXはバージョンが変わると同じ関数でも引数が変わったりしてうまく動きませんね。
August 2007バージョンはどうでしょう
http://www.microsoft.com/downloads/details.aspx?FamilyID=529f03be-1339-48c4-bd5a-8506e5acf571&displaylang=en

投稿日時 - 2009-02-16 12:03:02

補足

リンク先のものを早速導入してみました。

英語で
* Direct3D8 and all of the earlier versions
* DirectInput7 and all of the earlier versions
* DirectX8-era HRESULT conversion routines
などとD3D8が搭載されてる最後のバージョンがリンク先のものだと掲載されていますが、
それを入れてパスを通してからコンパイルしてみるとやはり

fatal error C1083: include ファイルを開けません。'd3dx8.h': No such file or directory

と出てきました。
ためしにIncludeフォルダを見てみるとd3d8.hやd3dx9.hはあるのに
d3dx8.hが無いのが原因のようです。

これはどう対応すべきなのでしょうか・・。
ひょっとするとあるバージョンを境にd3dx8.hが搭載されなくなったとか・・?

投稿日時 - 2009-02-16 14:10:12

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

 こんにちは。

 確かに付属してこないらしいです。検索してみたら、幾つか其れらしき文章を見かけました。
 一応、当方のPC上では、DirectX 7~9まで全て使える状態なので、d3dx8.hも存在します。
 其のまま書くとマズイので書き直しています(この程度のコードなのだが・・・)。

#ifndef __D3DX8_H__
#define __D3DX8_H__

#include "d3d8.h"
#include <limits.h>

#ifndef D3DXINLINE
#ifdef _MSC_VER
#if (_MSC_VER >= 1200)
#define D3DXINLINE __forceinline
#else
#define D3DXINLINE __inline
#endif
#else
#ifdef __cplusplus
#define D3DXINLINE inline
#else
#define D3DXINLINE
#endif
#endif
#endif


#define D3DX_DEFAULT ULONG_MAX
#define D3DX_DEFAULT_FLOAT FLT_MAX

#include "d3dx8math.h"
#include "d3dx8core.h"
#include "d3dx8tex.h"
#include "d3dx8mesh.h"
#include "d3dx8shape.h"
#include "d3dx8effect.h"


#endif //__D3DX8_H__

投稿日時 - 2009-02-16 16:44:46

補足

わざわざ探してくださりありがとうございます!
ただ、残念なことに

#include "d3dx8math.h"
#include "d3dx8core.h"
#include "d3dx8tex.h"
#include "d3dx8mesh.h"
#include "d3dx8shape.h"
#include "d3dx8effect.h"

のいずれもが#1の方が紹介してくださったDirectX2007の8月版には付属してないようでした・・。
どうやらd3dx8~系統はすべてないようです。
確認してみた中では2006年2月版からは既にd3dx8.hがありませんでした。
今MS公式ページからは既にDirectX8SDKやDirectX8の機能が全て使えるDirectX9SDK
はもうダウンロードできなくなっているようです。
これは私の勘なのですがおそらく2004年の10月版あたりまではこれら8.0の機能が
使えたのではないのかなと推測しています。
(2004年10月版は最後のVC6.0で使えたバージョンなので)

そこでふと思い立って自分の昔作成した保存用HDD内を見てみるとなんと
今はMSが削除しているDirectX9SDK最初期の2002年版が見つかりました!

その中のIncludeフォルダを見てみるとこれら削除されているファイルがありました。

無事にコンパイルが・・と思ったらやはりエラーが(泣)
どうやらDirectXだけでなくPlatformSDKとかWINAPI関連の仕様の変更とDirectXが競合して
カオスなエラーがでまくっています。

まずPlatformSDK関連でPVOID関連で;がどうのこうのとかのエラーが大量に吐かれました。
そこでひょっとすると同じ定義の多重宣言によるライブラリ混乱が問題かなと思い、
Include、Libパス共に優先順位をDirectXSDKのパスよりPlatformSDKパスを上にもっていく
とこの類のエラーは解決しました。

ただし、
fatal error LNK1104 : コンパイラは、ファイル'libci.lib'を開くことができません
というエラーが依然残りました。

どうやら検索で出てきた
http://vision.kuee.kyoto-u.ac.jp/~nob/diary/mdiary.cgi?year=2003&mon=7#67
を参照すると
VS2002まで提供されていたDirectXSDKには古いiostream形式を採用している
箇所があるようで
これもまた運良く見つけることができた
http://yoshirf.atnifty.com/yj/index.html
によると
メニュー -> プロジェクト -> プロパティ を選択して 構成プロパティ -> リンカ -> コマンドライン -> 追加のオプションの所に /nodefaultlib:libci を追加すると、ビルド&実行できるようになるとのことで
試してみました。

すると・・・!なんと実行できました!!!
感動です。解答してくれたお二方、本当にありがとうございました!

投稿日時 - 2009-02-16 16:50:58

あなたにオススメの質問