C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: VC++でDirectXのバージョン取得方法について


(過去ログ 108 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■64289 / inTopicNo.1)  VC++でDirectXのバージョン取得方法について
  
□投稿者/ C++初心者 (1回)-(2012/11/21(Wed) 22:27:11)

分類:[C/C++] 

Windows7 64bit
Visual Studio 2012
VC++

上記環境で、MFC ActiveXコントロールの作成をしています。
その中で、DirectXのバージョンを取得する処理を書いています。
自分が試した方法は、下記の2パターンです。

@DirectXSetupGetVersion 関数を使用して取得
Aレジストリ(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectX\Version)から取得

@の方法を使用すると、コンパイル後に[MSB8011]のエラーコードが発生してしまい、
正常に動作しませんでした。
dsetup.dllが見つからないため、このエラーが発生していると思うのですが、解決策がよくわかりません。
※DirectX SDKのバージョンは June 2010 です。
 インクルードディレクトリ・ライブラリディレクトリも設定しております。

Aの方法を使用すると、値が[4.09.00.0904] でDirectX 9.0cの情報が記載されていました。
しかし、PCにインストールされるDirectXのバージョンは、DirectX 11(dxdiagにて確認)です。


そこで質問なのですが、
1. @で発生する[MSB8011]のエラーコードの解決策がありましたお教えください。
2. Windows 7以降では、レジストリの場所が変わったのでしょうか?
3. 他に取得する方法がありましたら教えてください。

よろしくお願いします。
引用返信 編集キー/
■64290 / inTopicNo.2)  Re[1]: VC++でDirectXのバージョン取得方法について
□投稿者/ Jitta (20回)-(2012/11/21(Wed) 22:32:30)
Jitta さんの Web サイト
http://qa.atmarkit.co.jp/q/2544
マルチポストかな
引用返信 編集キー/
■64291 / inTopicNo.3)  Re[2]: VC++でDirectXのバージョン取得方法について
□投稿者/ C++初心者 (3回)-(2012/11/21(Wed) 22:38:41)
> マルチポストかな

その通りです。スイマセン。
早めに解決したかったもので。。。

こちらのほうが、レスポンス早いのかなって思って投稿させてもらったんですが、
どちらか削除したほうがいいんでしょうか?
引用返信 編集キー/
■64296 / inTopicNo.4)  Re[3]: VC++でDirectXのバージョン取得方法について
□投稿者/ howling (89回)-(2012/11/22(Thu) 10:51:50)
規約にもありますし、いずれかを削除した方が良いかと。
しない場合は、少なくともどちらかで解決した場合に、
解決した内容を貼り付けるくらいのことはするべきだと思います。

※個人的には、マルチポストする側の気持ちはわかりますが、
 答える側としては確かに不快だったりします。
 答えても意味ないかもしんないじゃんっていう。

ところで、指定されたバージョンではDirectX9.0cも使えるようですね。
でも、軽く調べるとWindows7に搭載されるのはDirectX11なんですねぇ。
念のため聞きますが、ビデオカードは対応してますか?
http://pc.watch.impress.co.jp/docs/topic/spec/gpu_spec.html

というか、よくその調べ方見つけましたね…見つからないです(苦笑
dxdiagはわかったから!!ってなりますねorz
引用返信 編集キー/
■64304 / inTopicNo.5)  Re[4]: VC++でDirectXのバージョン取得方法について
□投稿者/ とっちゃん (21回)-(2012/11/22(Thu) 17:45:24)
とっちゃん さんの Web サイト
No64296 (howling さん) に返信
> 規約にもありますし、いずれかを削除した方が良いかと。
@ITのほうはわかりませんが、わんくまBBSはマルチポストは否定していないはずです。
一応、規約のところ見たけどそれらしいのは書いてませんでしたよ?


> しない場合は、少なくともどちらかで解決した場合に、
> 解決した内容を貼り付けるくらいのことはするべきだと思います。
>
> ※個人的には、マルチポストする側の気持ちはわかりますが、
>  答える側としては確かに不快だったりします。
>  答えても意味ないかもしんないじゃんっていう。
>
マルチポストは否定しませんが、どちらかで進展があったらもう一方にも
フィードバックするのが質問者の礼儀です。
ですので、可能な限り迅速に双方の掲示板に進展状況を書き込んでいれば
誰も不快には思わないと思いますよ。

引用返信 編集キー/
■64310 / inTopicNo.6)  Re[5]: VC++でDirectXのバージョン取得方法について
□投稿者/ howling (96回)-(2012/11/22(Thu) 19:40:03)
> @ITのほうはわかりませんが、わんくまBBSはマルチポストは否定していないはずです。
> 一応、規約のところ見たけどそれらしいのは書いてませんでしたよ?

うお、ホントだ…。
DOBON.NETと勘違いしてたようです。
http://dobon.net/vb/bbs/index.html#multipost

じゃあいいのかな…。

> ですので、可能な限り迅速に双方の掲示板に進展状況を書き込んでいれば

これをしっかりしてくれればそう思わなくなるのかなと。
正直、そこまでしっかりしたマルチポストを見かけたことが無いのが固定観念になっているのかなと…。
せめてURLはっ付けておいてくれれば大丈夫なので、今回の場合は両方見ればいいかーとは思ってます。
※やっぱり好きか嫌いかの話であれば嫌いなんですがね^^;
引用返信 編集キー/
■64314 / inTopicNo.7)  Re[6]: VC++でDirectXのバージョン取得方法について
□投稿者/ C++初心者 (4回)-(2012/11/23(Fri) 01:06:50)
マルチポストは規約をしっかり読んで、今後しないように致します。
すいませんでした。

一応自己解決しましたので、長文になりますが、手順を記載させて頂きます。
@ITの質問はこちらのリンクを記載して解決済みに致します。

方法は@のDirectXSetupGetVersion でやりました。

1) プロジェクトプロパティーページ - リンカー - 全般 - 出力の登録を[いいえ]に変更
2) コンパイル
  regsvr32.exeが実行されないため、[MSB8011]が発生しなくなりました。
3) ActiveXのinf (セットアップ情報ファイル)に、DSETUP.dll情報を追記
-TestDxVer.inf---------------------------
~省略~
[Add.Code]
TestDxVer.ocx=TestDxVer.ocx
DSETUP.dll=DSETUP.dll ←追記

[TestDxVer.ocx]
file-win32-x86=thiscab
clsid={XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
FileVersion=1,0,0,1
RegisterServer=yes

[DSETUP.dll] ←追記
file-win32-x86=thiscab
-----------------------------------------

4) $(DXSDK_DIR)Redist内にある、DSETUP.dllをCabファイル生成時に
  ocx、infと一緒にCabファイルに圧縮する。

無理やりですが、この方法で動かすことが出来ました。
しかし取得できた値が、レジストリ値と同様で[4.09.00.0904]でした。。。

http://msdn.microsoft.com/ja-jp/library/ee416788(v=vs.85).aspx
WindowsXPではDirectX10は利用出来ないとありましたので、
OS判定をして、XPから前のOSならば、
http://en.wikipedia.org/wiki/DirectX
↑のバージョンと照らし合わせて値を返し、
Vista以降は照らし合わせた結果が、9以下の場合
WindowsVista : 10, WIndows7 : 11, WIndows8 : 11.1
を返す仕様にして対応しました。

正確性に欠け無理やりな対応ですが、この機能だけに時間も避けないのでとりあえずこれで解決にしました。
もっとしっかりとした方法がありましたらお教えください・・・。
ありがとうございました。
解決済み
引用返信 編集キー/
■64323 / inTopicNo.8)  Re[7]: VC++でDirectXのバージョン取得方法について
□投稿者/ とっちゃん (23回)-(2012/11/26(Mon) 11:48:46)
とっちゃん さんの Web サイト
No64314 (C++初心者 さん) に返信
> 正確性に欠け無理やりな対応ですが、この機能だけに時間も避けないのでとりあえずこれで解決にしました。
> もっとしっかりとした方法がありましたらお教えください・・・。
> ありがとうございました。

一応の解決は見ているようですが...

DirectX 9 以上は、使いたい機能が利用可能か?で動作判定が必須になりました。
単純にバージョンをチェックした場合、全部 DirectX 9 と判断されます(Vista 以降は、実質9Ex)。

ですので、DirectXSetupGetVersion やレジストリを参照して判断するのではなく
利用したいインターフェースの取得を試みる or FeatureLevel を取得するなどで
判断する必要があります。

ちなみに。。。
Windows7 は、デフォルトで DirectX 10.1 で、アップデートで11に
Vista はデフォルト10で、アップデートで10.1になります。

10.0 と 10.1 は、3Dに違いはなく、Direct2D や DirectWrite などの2D系機能が追加されていたはずです。
記憶を頼りに書いてるのでかなり怪しいですが...

#解決済みはチェック入れておきますね。

解決済み
引用返信 編集キー/
■64334 / inTopicNo.9)  Re[8]: VC++でDirectXのバージョン取得方法について
□投稿者/ クロエ (3回)-(2012/11/27(Tue) 10:50:09)
>C++初心者さん

dxdiagで表示されているバージョン情報でOKであれば、dxdiagの結果を取ってくるってのはどうでしょう?
dxdiag.exeは結果をテキストorXMLに出力できます。

dxdiag /? でパラメータを見たところ・・・

[テキスト]
dxdiag /t xxxx.txt

[XML]
dxdiag /x xxxx.xml

こんな感じで結果がファイルに出力されました。

解決済み
引用返信 編集キー/
■64345 / inTopicNo.10)  Re[9]: VC++でDirectXのバージョン取得方法について
□投稿者/ C++初心者 (5回)-(2012/11/28(Wed) 00:24:29)
No64323 (とっちゃん さん) に返信
> 利用したいインターフェースの取得を試みる or FeatureLevel を取得するなどで
> 判断する必要があります。

なるほど・・・。
FeatureLevelを調べて実装していきたいと思います。
ありがとうございます!

No64334 (クロエ さん) に返信
> dxdiagで表示されているバージョン情報でOKであれば、dxdiagの結果を取ってくるってのはどうでしょう?
> dxdiag.exeは結果をテキストorXMLに出力できます。

こんなパラメーターがあったんですね!
自分の環境で試して見ましたが、ファイルが作成されるまでに20秒近くかかってしまっていたので、
これを組み込むのはちょっと厳しいです。。。
貴重な情報ありがとうございます!

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -