• ベストアンサー

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

現在DirectX9.0SDKが入っています。 時々DirectXのサンプルで7や8のものもあり、それらを9でコンパイルしたいときは どうしたら良いのでしょうか? コンパイルするとd3dx8.hが見つかりませんなどと出てきます。 最初は関数名や型で8がつくものを9に強引に置き換えていましたが、 関数や定義によっては8から9にかけて削除されたものや仕様が変わってしまったものも 多く、これは労力がかかりすぎると思いあきらめました。 8.0のSDKを探してきてダウンロードし、VisualStudioの設定でできる インクルードファイルの位置を9.0から8.0のファイルパスに置き換えるしかないのでしょうか?

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

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

RockmanX
質問者

補足

リンク先のものを早速導入してみました。 英語で * 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が搭載されなくなったとか・・?

その他の回答 (1)

回答No.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__

RockmanX
質問者

補足

わざわざ探してくださりありがとうございます! ただ、残念なことに #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 を追加すると、ビルド&実行できるようになるとのことで 試してみました。 すると・・・!なんと実行できました!!! 感動です。解答してくれたお二方、本当にありがとうございました!

関連するQ&A

  • VisualStudio 2005とSDKについて

    VisualStudio 2005でプログラミングをしようとしたところ、 #include <d3dx9.h> という部分がおかしいというエラーがでます。自分がやったことは 1.DirectX SDK April2007をインストール 2.VisualStudioをインストール 3.両方アンインストール 4.VisualStudioをインストール 5.DirectX SDK April2007をインストール です。VisualStudioに付属していたnet Framework 2.0SDKというやつはインストールしていません。 必要であれば実際のエラー画面やその他の情報を公開いたします。宜しくお願い致します。

  • DirectXプログラミングの参考書を読んで

    『マスタリングDirectXプログラミング 橋口ゆうすけ著』を読みながら、ゲームプログラミングの練習をしているのですが、このプログラムを実行してもエラーが出て実行できません。 エラーがでているのは #include <d3dx9.h> の部分。 エラー内容は include ファイルを開けません。'd3dx9.h': No such file or directory です。 その内容どおりd3dx9.hというファイルがないからなんでしょうけど。。。 本書ではこの内容を実行してみてと書いてあります。 ということは実行できるはず・・・ ちなみに、本書の内容は「DirectX SDK(August 2007)」を用いて・・・と書いてあるんですが、その意味がよくわかっていません。 これが原因なのでしょうか? それともd3dx9.hというファイルがないからなんでしょうか? とは言え、#include <windows.h>や#include <basetsd.h>という行はエラーなく読み込んでいるようなんですが。。。(そんなファイルないよ・w・; なにかアドバイスお願いします。

  • DirectX SDKのインストールと設定

    使用しているコンパイラはborlandです。 DirectX SDKをインストールして、早速使ってみたのですが エラーがでてしまい、コンパイルが出来ません。 エラー内容は エラー E2451 test.c 26: 未定義のシンボルGetAdapterDisplayMode(関数WinMain) などの「未定義のシンボル」というエラーがずらりと出てしまいます。ソースは入門サイトから持ってきたものなのでソースには問題は無いと思います… どなたか教えてください。よろしくお願いします。

  • DirectX サンプル エラー

    こんにちは。DirectXプログラミング初心者です。 Visual C++ 2005 Express Editonで開発しております。 Platfrom SDKもインストール済みです。 DirectX 9.0 SDKの最新版のサンプルをコンパイルしようとすると、 fatal error C1083: include ファイルを開けません。'dimm.h': No such file or directory とエラーがでてコンパイル出来ません。 また、工学社の「DirectX9 DirectX Graphics」という本に付属しているDirectX 9.0 SDK(December 2004)をインストール(新しいSDKを消して)して、付属のサンプルをコンパイルすると、 DXGSample01.obj : error LNK2019: 未解決の外部シンボル _DXTraceW@20 が関数 "long __cdecl InitApp(struct HINSTANCE__ *)" (?InitApp@@YAJPAUHINSTANCE__@@@Z) で参照されました。 DXGSample01.obj : error LNK2019: 未解決の外部シンボル _D3DXCreateSprite@8 が関数 "long __cdecl InitDXGraphics(void)" (?InitDXGraphics@@YAJXZ) で参照されました。 DXGSample01.obj : error LNK2019: 未解決の外部シンボル _D3DXCreateTextureFromFileW@12 が関数 "long __cdecl InitDXGraphics(void)" (?InitDXGraphics@@YAJXZ) で参照されました。 DXGSample01.obj : error LNK2019: 未解決の外部シンボル _Direct3DCreate9@4 が関数 "long __cdecl InitDXGraphics(void)" (?InitDXGraphics@@YAJXZ) で参照されました。 Debug/DXGSample01.exe : fatal error LNK1120: 外部参照 4 が未解決です。 と出てきます。 コンパイラの方の「プロパティ」→「構成プロパティ」→「リンカ」→「入力」の「追加の依存ファイル」に d3d9.lib d3dx9dt.lib dxerr9.lib dxguid.lib の4つは追加済みです。 インクルードパス・ライブラリパスがおかしいのでしょうか? ご回答お願いいたします。

  • DirectX9SDK(August2005)作品にd3dx9_27.dllは必須?

    このたび、DirectX9SDK(August2005)を用いてゲームの開発を行っているのですが、作成した物をほかのPCで動かそうとすると「d3dx9_27.dll」が無いといわれてしまい実行できません。 プログラムのベースにはMicrosoftのDirect3Dのサンプルを使用し、Commonフォルダのファイルも使用しています。 コンパイルはReleaseで行っています。 最新版のDirectX9ランタイムをインストールしたりいろいろと試してみたのですが結局うまくいきませんでした。 Microsoftは再配布を許していないらしいので一緒に配ることもできないですし・・・ どなたか解決策をお願いします!!m(_ _)m

  • DirectX8.0SDKサンプルのビルドでエラーが出てしまいます。

    DirectX8.0aのDirectShowのサンプルをビルドすると下記のエラーが発生して, コンパイルできません。 ..\..\..\..\include\strmif.h(28) : fatal error C1189: #error : this stub requires an updated version of <rpcndr.h> 開発環境はVisual C++ 5.0 Learning Editionを使っています。 OSはWindowsMEです。 rpcndr.hのバージョンが古いためのようですが, Visual C++ 5.0ではDirectX8.0aは扱えないのでしょうか? ちなみに,インクルードファイルやライブラリファイルのパスは, DirectX SDKの方を先に探すように設定してあります。 (rpcndr.hはSDKには含まれてはいないようですが)

  • DirectX9SDK(August2005)作品にd3dx9d_27.dllは必須?

    突然ですが質問させていただきます。 ただいまDirectX9.0SDK(August2005)を使用してゲームを作っているのですが、完成作品を友達に上げたところ、「d3dx9d_27.dll」が無いといわれ、実行できないみたいです。DirectXランタイムは最新バージョンらしいのですが・・・ 自分のシステムフォルダを調べてみたら確かにそのDLLはありました。でも説明のところにDebugと書いてあるのですが、ReleaseでコンパイルしているはずなのにこのDLLってやっぱり必要なんですか? どなたか回答をお願いしますm(_ _)m

  • DirectX 2005 Aprilのコンパイルについて

    DirectX SDK summer2003で開発していたのですがDirectX SDK 2005 Aprilが出たのを機にバージョンアップをしたところ今までコンパイルできていたサンプルがコンパイル出来なくなってしまいました。 次のようなエラーが出ました。 error C2664 'D3DXLoadMeshFromXof':1番目の引数を'LPDIRECTXFILEDATA'から'LPD3DXFILEDATA'に変換できません error C2061 構文エラー 識別子'LPDIRECTXFILEDATA' です。 どなたか対処の方法ご存知の方教えていただけないでしょうか。 開発環境はVC++.net2003です。

  • DirectXについて 「d3dx9.hファイルが見つかりません」というエラー

    今後DirectXが必要になりそうなので そちらの勉強をはじめようと思っています。 ですがそもそもDirectXというものすら何なのかわからない 状態でしたのでまずは書籍を購入し、目を通しました。 やはり文章だけでは理解が難しかったので 付属のサンプルソースをCDからコピーし実行してみたのですが、 > fatal error C1083: include ファイルを開けません。 > 'd3dx9.h': No such file or directory とエラーが表示されビルドが中断されてしまい、 実行することができないようです。 「d3dx9.h」が見つからないということはわかるのですが、 「DirectX SDK 2007February」というものをインストール しているのですが、他にもなにか必要ということなのでしょうか? また、拡張子が「.x」のファイルを実行すると Direct3D Viewerが立ち上がるのですが全て読み込みエラーで 画面には何も表示されていません。 試にメタセコイアで作ってみたものも駄目でした。 これも上記の「d3dx9.h」というものが関係していたりしますか? ちなみにDirectXで作られたゲームはプレイできます。 やはり私の環境の問題なのでしょうか・・・。 お分かりの方がいらっしゃいましたら、アドバイスを いただければ幸いです。よろしくお願い致します。

  • DirectXとカメラ

    カメラ画像を取り込むプログラムとDirectXで3Dを表示するプログラムを一つのシステムにしようと試行錯誤しているのですが、ヘッダーファイルの競合のせいで(多分)、うまくいきません。 1>h:\dx90sdk\include\d3drmobj.h(274) : error C2061: 構文エラー : 識別子 'LPDIRECT3D' このようなエラーが15件ほど出ます。 ネットでいろいろ調べてみたのですが、どれもうまくいきません。 どうしたらいいでしょうか? WindowsXPPro、VisualStadio2005、DirectX9で作業しています。 以下が使用しているヘッダーファイルです。これらを一つのヘッダーにまとめてそれをそれぞれのcppファイルでincludeしています。 #include <windows.h> #include <dshow.h> #include <stdio.h> #include <stdlib.h> #include <conio.h> include <qedit.h> #include <math.h> #include <mmsystem.h> #include <sys/timeb.h> #include <time.h> #include <atlbase.h> #include <malloc.h> #include <memory.h> #include <tchar.h> #include <string.h> #include <process.h> #include <winsock2.h> #include <ws2tcpip.h> #include <iostream> #include <d3d9.h> #include <d3dx9.h> #include <d3d9types.h>

専門家に質問してみよう