トップページ > 過去ログ > 記事閲覧
ジョイパッドつないで起動すると
名前:しゅぴ 日時: 2010/10/16 22:05

DXライブラリ3.04のバグらしきものを見つけたので報告いたします。 ジョイパッドを接続してプログラムをVC++2008 Express Editionの"デバッグ開始"で実行すると、 DxLib_Endが呼ばれた辺りで次のようなエラーメッセージが表示されます。 〇〇.exeの0x100047b7でハンドルされていない例外が発生しました: 0xC0000005:場所0xfeeeff4eを読み込み中にアクセス違反が発生しました。 DXライブラリを初期化して終了するだけのプログラムでもです。 なお、実行ファイルを直接実行した場合はエラーメッセージは出ません。 使っているジョイパッドは、ELECOM社製のJC-U3212FBKというもので、 プレイステーションのコントローラに似た、アナログスティックが二本付いているものです。 OSはWindowsXP Home SP3で、CPUはCeleron M 1.3GHz、メモリは1.12GBです。 この問題に解決方法はあるのでしょうか。

Page: 1 |

Re: ジョイパッドつないで起動すると ( No.1 )
名前:いっち 日時:2010/10/17 15:24

条件を満たした場合の再現率は100%でしょうか? 事象発生時のLog.txtをご提供頂けますか?
Re: ジョイパッドつないで起動すると ( No.2 )
名前:しゅぴ 日時:2010/10/18 08:47

はい。上に書いた条件を満たせば必ず起きます。 それで、以下がLog.txtの中身です。 10:システムの情報を出力します 20: DXライブラリ Ver3.04 20: OS WindowsXP ( Build 2600 Service Pack 3 ) 121: CPU動作速度:大体1.13GHz 124: MMX命令を使用します 127: SSE命令が使用可能です 128: SSE2命令が使用可能です 130: CPUベンダ:GenuineIntel 136: CPU名:Intel(R) Celeron(R) M processor 1300MHz 141:COMの初期化... 成功しました 161:メモリ総量:1150.98MB 空きメモリ領域:535.56MB 163:タイマーの精度を検査します 168:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 169: パフォーマンスカウンターを使用します タイマー分解能 : 3579.545000 KHz 172: ソフトの二重起動検査... 二重起動はされていませんでした 175:ウインドウクラスを登録します... 登録に成功しました 180:フルスクリーンモード用のウインドウを作成します 240:ウインドウの作成に成功しました 261:カーソルを不可視にしました 262:IMEを無効にしました 325:DirectInput関係初期化処理 328: DirectInput7 の取得中... 成功 435: 引き続き初期化処理... 初期化成功 457: ジョイパッドの初期化... 467: 入力装置を見つけました 472: デバイスの登録名:JC-U3212F 474: デバイスの製品登録名:JC-U3212F 611: ジョイパッドの追加は正常に終了しました 613: ジョイパッドの初期化は正常に終了しました 615: マウスデバイスの初期化... 初期化成功 620: キーボードデバイスの初期化... 初期化成功 633:DirectInput 関連の初期化は正常に終了しました 635:DirectSound の初期化を行います 637:DirectSound インターフェースの取得を行います.... 成功 650:引き続きインターフェースの初期化処理... 成功 826: DirectSound デバイスを列挙します 830: モジュール名: ドライバ記述:プライマリ サウンド ドライバ 835: モジュール名: smwdm.sys ドライバ記述:SoundMAX Digital Audio 844: 最大サンプリングレート:48.00KHz 最小サンプリングレート:8.00KHz 851: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 854: 利用可能サンプリング精度 858: プライマリ 16bit = OK 8bit = NO 861: セカンダリ 16bit = OK 8bit = NO 865: 利用可能チャンネル 867: プライマリ MONO = OK STEREO = OK 870: セカンダリ MONO = OK STEREO = OK 874:DirectSound の初期化は正常に終了しました 895:DirectDraw オブジェクトの取得を行います.... 成功 929:引き続き初期化処理... 初期化に成功しました 942:IDirect3D9Ex オブジェクトを取得します.... IDirect3D9 オブジェクトを取得します.... 成功 1133:IDirect3DDevice9 オブジェクトを取得します.... ハードウエア頂点演算を使用します 3762:成功 3768:Driver:ati2dvag.dll Description:ATI MOBILITY RADEON 9100 IGP 3771:画面のフォーマットは D3DFMT_R5G6B5 です 3772:Zバッファのフォーマットは D3DFMT_D16 です 3775:16bit カラーフォーマットは D_D3DFMT_R5G6B5 です 3779:32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です 3784:アルファ付き 16bit カラーフォーマットは D_D3DFMT_A4R4G4B4 です 3786:アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です 3787:アルファテスト用 16bit カラーフォーマットは D_D3DFMT_A1R5G5B5 です 3790:アルファテスト用 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です 3792:DXT1テクスチャフォーマットは D_D3DFMT_DXT1 です 3795:DXT2テクスチャフォーマットは D_D3DFMT_DXT2 です 3797:DXT3テクスチャフォーマットは D_D3DFMT_DXT3 です 3799:DXT4テクスチャフォーマットは D_D3DFMT_DXT4 です 3804:DXT5テクスチャフォーマットは D_D3DFMT_DXT5 です 3805:描画用 16bit カラーフォーマットは D3DFMT_R5G6B5 です 3808:描画用 32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です 3809:描画用アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です 3812:Zバッファを作成します.... 成功 3817:プログラマブルシェーダーを使用しません 3842:フォントの初期化を行います 3857:フォントの初期化は正常に終了しました 3863:文字コードバッファの初期化を行います... 完了しました 3919:フォントの初期化を行います 3929:フォントの初期化は正常に終了しました 4454:DirectInput 関連の終了処理... 完了
Re: ジョイパッドつないで起動すると ( No.3 )
名前:いっち 日時:2010/10/19 19:48

回答ありがとうございます。 ログを拝見したところ、確かに終了処理の途中で止まっているようですが、詳しいことは私では分かりかねます。 お役に立てず申し訳ありませんが、他の方の回答をお待ちになってください。 その前に、最新のテストバージョンで改善されている可能性がありますので、お試しになってみてください。 > ttp://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe > ttp://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe また、デバイスのドライバを最新にすることで改善する可能性もありますのでお試し下さい。
Re: ジョイパッドつないで起動すると ( No.4 )
名前:管理人 日時:2010/10/24 03:29

ご報告ありがとうございます 同系列の JC-U3212FU を手に入れて試してみたところ同様の現象が発生しました どうやらジョイパッドの振動機能の初期化を行うと、後始末処理でご報告いただいたエラーが発生するみたいです ただ、DirectX SDK 付属の DirectInput の振動機能サンプルでも同様のエラーが発生するので、 恐らくジョイパッドのドライバのバグが原因だと思います 何故か Visual Studio のデバッグ起動をしたときのみエラーが報告されて、実行ファイルを 直接起動した場合はエラーが報告されないので、このパッドを使用している人で且つ Visual Studio で DirectInput を使ってジョイパッドの振動機能を使用した場合のみに確認できるエラーのようです ドライバのバグが原因なので根本的な解決はできませんが、ジョイパッドの振動機能を使用するかどうかの 設定を行うための関数を追加しましたので、もし振動機能は使わないということでしたら その関数を追加したこちらのバージョンをお使い下さい http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) 追加した関数はこちらです // ジョイパッドの振動機能を使用するかどうかのフラグをセットする // DxLib_Init の前でのみ有効 int SetUseJoypadVibrationFlag( int Flag ) ; DxLib_Init を呼ぶ前の箇所に SetUseJoypadVibrationFlag( FALSE ) ; という記述を増やすと振動機能に関する初期化を行わなくなりますので、終了時のエラーも発生しなくなります
Re: ジョイパッドつないで起動すると ( No.5 )
名前:しゅぴ 日時:2010/10/25 09:06

どうも、返事が遅れてすみません。 >いっち さん 自分で思いついてデバイスドライバを更新してみたんですが、結果は同じでした。 >管理人 さん ジョイパッドのドライバに問題があったのですね。 どうもお手数をかけました。 迅速な対応ありがとうございます。 早速テストバージョンを使わせていただきます。

Page: 1 |