Re: DxLib_Endで0xC0000005例外 ( No.1 ) |
- 名前:管理人 日時:2012/03/25 18:11
私も手元で振動機能に対応したパッドでテストしてみましたが、特に DxLib_End で停止することはありませんでした
テストにはこちらの2秒間単純に振動させて終了するだけのプログラムを使用したのですが、かげさんの環境では
こちらのプログラムでも同様にエラーが発生しますでしょうか?
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
// DXライブラリ初期化処理
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 )
return -1; // エラーが起きたら直ちに終了
// 振動開始
StartJoypadVibration( DX_INPUT_PAD1, 1000, 10000 ) ;
// 2秒間経過するまで待つ
WaitTimer( 2000 ) ;
// DXライブラリ使用の終了処理
DxLib_End() ;
// ソフトの終了
return 0 ;
}
|
Re: DxLib_Endで0xC0000005例外 ( No.2 ) |
- 名前:かげさん 日時:2012/03/25 21:35
調査していただき、ありがとうございます!
例示いただいたソースを実行したところ
「デバッグ実行」時に例外が発生しました。
DxLibTestProject.exe の 0x03d73445 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0xfeeeff52 を読み込み中にアクセス違反が発生しました。
先の「DxLib_Endで例外」にあったソースで
ステップ実行で確認したところ
DxInput.cppの754行目にある
pad->Device->Release() ;
で例外が発生していました。
同じソースでも「デバッグなしに開始」だと
例外は発生しませんでした。
|
Re: DxLib_Endで0xC0000005例外 ( No.3 ) |
- 名前:管理人 日時:2012/03/25 22:28
お試し頂きありがとうございます
恐らくですが、コントローラのドライバに何かしらの原因があるのだと思います
「デバッグなしに開始」では例外が発生しないとのことですので、VisualSdutioの
デバッグ機能との相性が何か悪いのかもしれません
「デバッグなしに開始」では例外が発生しないということは、恐らくビルドして
作成される exe ファイルを直接ダブルクリックして実行した場合も例外が発生しないと思います
なので、気持ち悪いかもしれませんが特に何もしなくても完成したプログラムの実行には
支障を来たさないと思います
毎回デバッグ開始のプログラム終了時にエラーが発生するが鬱陶しい場合は
#ifndef _DEBUG
DxLib_End();
#endif
という感じに、デバッグビルドのときは DxLib_End を実行しないようにすると良いかもしれません (・・;
( DxLib_End の解説には実行しないで終了すると駄目と書いていますが、XP 以降の OS では
明示的に終了処理をしなかった場合も OS が後始末をしてくれて特に問題が無いようですので・・・ )
|
Re: DxLib_Endで0xC0000005例外 ( No.4 ) |
- 名前:かげさん 日時:2012/03/26 20:41
回答いただきありがとうございます。
exe ファイルを直接実行した場合も例外が発生しないので
Visual Sdutioのデバッグ機能とドライバの相性みたいです。
#ifndef _DEBUG
DxLib_End();
#endif
作戦で行こうと思いますので
この件はクローズとしたいと思います。
|