Re: DxLib_End 実行時のアクセス違反について ( No.1 ) |
- 名前:管理人 日時:2011/01/23 23:06
不具合のご報告ありがとうございます
私の手元でアップしていただいたプロジェクトを使って試してみましたが、
何度試しても現象は再現しませんでした
DLLのアンロードをするコードは全部で4箇所にあるので、もしかしたら
TerminateDirectX 以外の関数内で先に解放されてしまっているのかもしれません
DLLをアンロードする箇所で「Direct3D9 DLL の解放 4」というように
アンロードしたことと、アンロードした箇所を記したログが出力されるようにしてみましたので、
よろしければこちらのソースで再度試してどのようにログが出力されるか教えていただけないでしょうか?m(_ _)m
http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe
|
Re: DxLib_End 実行時のアクセス違反について ( No.2 ) |
- 名前:いっち 日時:2011/01/24 22:18
> よろしければこちらのソースで再度試してどのようにログが出力されるか教えていただけないでしょうか?m(_ _)m
テストしてみました。
結果としては「Direct3D9 DLL の解放 4」が出力されていました。
以下が、その際の出力ウィンドウの内容です。
> ://www1.axfc.net/uploader/Sc/so/197819.zip&key=dxlib
よろしくお願いします。
|
Re: DxLib_End 実行時のアクセス違反について ( No.3 ) |
- 名前:いっち 日時:2011/01/27 20:56
追記です
ご参考になるかわかりませんが、以下の関数の戻り値は正常時も事象発生時も 0 が返ってきていました。
> GRH.Direct3DDevice9Object->Release() ;
また、通過したときに終了しているスレッドは、以下の部分を通過したときに作成されるスレッドのようでした。
DxGraphics2.cpp Line:3962 (CreateDirect3D9DeviceObject)
> hr = GRH.Direct3D9Object->CreateDevice(
> GRH.ValidAdapterNumber ? GRH.UseAdapterNumber : D_D3DADAPTER_DEFAULT,
> D_D3DDEVTYPE_HAL,
> GetMainWindowHandle(),
> // D_D3DCREATE_MIXED_VERTEXPROCESSING/*D_D3DCREATE_HARDWARE_VERTEXPROCESSING*/
> ( GRH.VertexHardwareProcess ? D_D3DCREATE_MIXED_VERTEXPROCESSING : D_D3DCREATE_SOFTWARE_VERTEXPROCESSING )
> | ( WinData.UseFPUPreserve ? D_D3DCREATE_FPU_PRESERVE : 0 )
> | ( GRH.UseMultiThread ? D_D3DCREATE_MULTITHREADED : 0 ),
> ¶m,
> &GRH.Direct3DDevice9Object ) ;
現在テストに使用しているプロジェクトです。(DXライブラリからビルドするようにしているので少し大きいです)
> ://www1.axfc.net/uploader/He/so/310515.zip&key=dxlib
|
Re: DxLib_End 実行時のアクセス違反について ( No.4 ) |
- 名前:管理人 日時:2011/02/05 23:20
ご情報ありがとうございます
「Direct3D9 DLL の解放 4」が出力される箇所で解放されているとなると、私の意図通りの正常な動作です・・・
アップしていただいたプロジェクトを実行してみたのですが、件の現象は発生しませんでした
15回ほど実行したのですが、どのくらいの割合で発生するのでしょうか?
あと、Direct3D9 DLL 以外に Direct3DDevice9 の解放も関係しているので
原因がわかる可能性は低いですが Direct3DDevice9 の解放時にも
「Direct3D9Device の解放 2」 といったログを出力するようにしてみました
何度も申し訳ありませんが、よろしければこちらで再度お試しになってみていただけ無いでしょうか? m(_ _;m
http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe
|
Re: DxLib_End 実行時のアクセス違反について ( No.5 ) |
- 名前:いっち 日時:2011/02/06 20:04
> 何度も申し訳ありませんが、よろしければこちらで再度お試しになってみていただけ無いでしょうか? m(_ _;m
テストしてみました。
結果としては正常時も異常時も「Direct3DDevice9 の解放 3」が出力されていました。
以下が、その際の出力ウィンドウの内容です。
> ://www1.axfc.net/uploader/Sc/so/202338.zip&key=dxlib
> 15回ほど実行したのですが、どのくらいの割合で発生するのでしょうか?
発生するときはあっさり発生するのですが、発生しないときはなかなか発生しません・・・。
今回ログを取得する際も50回程試行して発生しないので以下のように若干ソースを改変しました。
> DXST_ERRORLOG_ADD( _T( "Direct3D9 DLL の解放 4\n" ) ) ;
> FreeLibrary( GRH.Direct3D9DLL ) ;
↓↓↓↓
> FreeLibrary( GRH.Direct3D9DLL ) ;
> DXST_ERRORLOG_ADD( _T( "Direct3D9 DLL の解放 4\n" ) ) ;
よろしくお願いします。
|
Re: DxLib_End 実行時のアクセス違反について ( No.6 ) |
- 名前:管理人 日時:2011/02/13 19:01
お試しいただきありがとうございます
「Direct3DDevice9 の解放 3」が出力されていたとなりますと、解放される箇所は私の意図通りです
今回も70回ほど試してみましたが私の環境では再現しませんでした
何度もお試しいただいているので心苦しいのですが、この件はとりあえず保留としたいと思います
貴重なお時間を使っていただいたのに解決せずで申し訳ありません
保留にする理由は
・原因特定には現象が再現できる環境でも何十回とテスト実行をしなければならないと予想できますが、
まず現象が再現できないので原因特定が困難
・発生タイミングが終了時なので仮に発生してもプレイヤーの不利益になり難い
の二つです
原因についてですが、DXライブラリのプログラムにあるのか、それとも他の何かにあるのかはわかりません
Direct3DDevice の解放をしただけでエラーが発生しているので、グラフィックスデバイスのドライバや
インストールされている DirectX の DLL に原因がある可能性もありますし、
DXライブラリのプログラムにある場合はDXライブラリ内での Direct3D API 呼び出しのどれかが
原因となっている可能性があります
DirectX SDK をインストールすると付いてくる Debug版のDirectXランタイムライブラリを使用するように設定すると
Direct3D の些細なエラーや警告レベルの処理でもログに出力されるのですが、それにも何も出力されないので、
原因は結構根深いところにあるのかもしれません
|
Re: DxLib_End 実行時のアクセス違反について ( No.7 ) |
- 名前:いっち 日時:2011/02/14 20:41
> 何度もお試しいただいているので心苦しいのですが、この件はとりあえず保留としたいと思います
> 貴重なお時間を使っていただいたのに解決せずで申し訳ありません
了解しました。こちらこそご尽力頂き感謝しております。
私としてはとりあえず「DXライブラリ内で要因として思い当たる点の有無」をお聞きしたかったので満足しております。
今後はDirectXやドライバ周りを見直してみたいと思います。
現在は、DirectXのrun-timeをインストールしなおして、様子を見ています(軽くテストしただけですが事象は発生していません)。
また、何か進展があればご報告させていただきます。
ありがとうございました。
|
Re: DxLib_End 実行時のアクセス違反について ( No.8 ) |
- 名前:いっち 日時:2011/03/28 22:49
一月ほど様子を見ましたが、再発していません。
(ただ、まちがえてOSのパッチもあててしまったので原因がDirectXにあったのか確信はありません)
大変お騒がせして申し訳ありませんでした。
これで解決とさせて頂きます。
|