トップページ > 記事閲覧
Windows8でVMDを読み込むと例外発生
名前:みょも 日時: 2013/08/13 05:12

Windows7 Ultimate(x64)からOSをWindows8 Pro(x64)に変更したところ、 正常動作していたプログラムが動かなくなってしまいました。 使用言語はC#ですが、C++のシンプルなコードでも再現しました。 具体的には MV1LoadModelでPMDモデルをロード時、VMDモーションファイルの読み込みがあると AccessViolationExceptionが発生します。 プラットフォームをAnyCPUやx64に設定した場合のみ発生し、x86コンパイルでは発生しません。 また、モデル単体のみでモーションを読み込まない場合も発生しません。 DXライブラリのバージョンは3.10eですが、タイムスタンプ2012/12/31のバージョンでも発生していました。
メンテ

Page: 1 |

Re: Windows8でVMDを読み込むと例外発生 ( No.1 )
名前:管理人 日時:2013/08/17 21:33

Windows8 Pro(x64) の環境が手元に無いので現象の確認ができません・・・ C++のシンプルなコードでも再現されたとのことですが、プラットフォームの AnyCPU や x64 というのは C# のプロジェクトでの設定ですよね? C++で現象が再現された際のプラットフォーム設定はどのようにされていたのでしょうか? あと、よろしければエラーが発生した際の Log.txt の中身をこちらの掲示板に貼り付けて頂けないでしょうか? お願いばかりで申し訳ありません
メンテ
Re: Windows8でVMDを読み込むと例外発生 ( No.2 )
名前:みょも 日時:2013/08/18 17:31

>C++のシンプルなコードでも再現されたとのことですが、プラットフォームの >AnyCPU や x64 というのは C# のプロジェクトでの設定ですよね? はい。 C++の場合は構成マネージャでアクティブプラットフォームをx64にした場合に再現し、 Win32に設定した場合は問題なく動作します。 c#とvcのLog.txtをアップしておきますね。 ttp://kie.nu/1ftt
メンテ
Re: Windows8でVMDを読み込むと例外発生 ( No.3 )
名前:管理人 日時:2013/08/22 00:10

ご返答ありがとうございます ログを拝見する限りではC#で正常にモデルデータを読み込めていないようです ( 頂点の情報を保存するためのメモリサイズが何故か0バイトになっているようです・・・ ) 私の手元に Windows8 Ultimate(x64) があるのでVMDファイルがある状態でPMDファイルを 読み込んでみたのですが、エラーは発生しませんでした すべてのPMDファイル+VMDファイル読み込みで発生するわけではないかもしれませんので、 もし不都合がなければエラーが発生した際のPMDファイルとVMDファイルをメールで BQE00322(あっとまーく)nifty.com ( (あっとまーく)は@に置き換えてください ) に送っていただけないでしょうか?
メンテ
Re: Windows8でVMDを読み込むと例外発生 ( No.4 )
名前:みょも 日時:2013/08/22 19:17

PMDとVMDをメール送信しました。 ただ、いくつかモデルとモーションを試してみても全てだめなので、 特定のモデルやモーションでの問題ではなさそうです。 >( 頂点の情報を保存するためのメモリサイズが何故か0バイトになっているようです・・・ ) WPFからDXライブラリを利用している問題なのかわかりませんが、 Windows7で正常動作時にも同表記が出力されていました。 x86コンパイル時やVCでは出力されていません。 自分の環境のせいか、余計なプロセスを殺したりいくつかハードウェアを 外したりして試してみてはいるのですが・・・今のところ改善はみられません。
メンテ
Re: Windows8でVMDを読み込むと例外発生 ( No.5 )
名前:管理人 日時:2013/08/24 22:44

PMDファイルとVMDファイルをお送りいただきありがとうございます ですが、私の環境では再現しませんでした、謎です・・・ お手数で申し訳ありませんが、こちらに PMDファイルを読み込むだけのプログラムを DXライブラリのソース付きで実行する為のプロジェクトをアップしましたので、 よろしければこちらをデバッグ実行して、エラーが発生した際のコールスタックを こちらの掲示板にコピー&ペーストしていただけないでしょうか? m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibSourceTest.exe > WPFからDXライブラリを利用している問題なのかわかりませんが、 > Windows7で正常動作時にも同表記が出力されていました。 > x86コンパイル時やVCでは出力されていません。 うーんそうなのですか・・・ C#版はC++版をそのまま使用しているので挙動に変化があるのはこれまた謎です・・・ 本件の原因が分かればこちらの原因も分かるかもしれません
メンテ
Re: Windows8でVMDを読み込むと例外発生 ( No.6 )
名前:みょも 日時:2013/08/24 23:55

VisualStudio2012だったので、プロジェクト読み込み時に変換が入りましたが・・・ コールスタックを貼り付けておきます。 お手数をお掛けしますがよろしくおねがいします。 --------- DxLibSourceTest.exe!DxLib::DXA_DIR_FindClose(unsigned __int64 FindHandle=18446744073270275808) 行 3373 C++ DxLibSourceTest.exe!DxLib::StreamFindClose(unsigned __int64 FindHandle=18446744073270275808) 行 417 C++ DxLibSourceTest.exe!DxLib::LoadFile_VMD(void * * VmdData=0x0000003edb16c7a8, int * FileSize=0x0000003edb16c784, int FileNumber=0, DxLib::MV1_FILE_READ_FUNC * FileReadFunc=0x0000000000000000, const char * Name=0x0000003edb16e420, int NameLen=12, const char * CurrentDir=0x0000003edb16e000, int * LoopMotionFlag=0x0000003edb16c7c4, float * BaseGravity=0x0000003edb16c854, int * GravityNo=0x0000003edb16c7e4, int * GravityEnable=0x0000003edb16c834, DxLib::tagVECTOR * Gravity=0x0000003edb16c808) 行 1153 C++ DxLibSourceTest.exe!DxLib::MV1LoadModelToPMD(const DxLib::MV1_MODEL_LOAD_PARAM * LoadParam=0x0000003edb16c980, int ASyncThread=0) 行 1329 C++ DxLibSourceTest.exe!DxLib::MV1LoadModel_Static(DxLib::MV1LOADMODEL_GPARAM * GParam=0x0000003edb16e5b0, int MHandle=939589632, const char * FileName=0x000007f764726000, const char * Directory=0x0000003edb16e000, const char * Name=0x0000003edb16e420, int ASyncThread=0) 行 15973 C++ DxLibSourceTest.exe!DxLib::MV1LoadModel_UseGParam(DxLib::MV1LOADMODEL_GPARAM * GParam=0x0000003edb16e5b0, const char * FileName=0x000007f764726000, int ASyncLoadFlag=0) 行 16145 C++ DxLibSourceTest.exe!DxLib::MV1LoadModel(const char * FileName=0x000007f764726000) 行 16188 C++ DxLibSourceTest.exe!WinMain(HINSTANCE__ * hInstance=0x000007f763e40000, HINSTANCE__ * hPrevInstance=0x0000000000000000, char * lpCmdLine=0x0000003edb3635f3, int nCmdShow=10) 行 12 C++ DxLibSourceTest.exe!__tmainCRTStartup() 行 238 C DxLibSourceTest.exe!WinMainCRTStartup() 行 164 C kernel32.dll!000007fa83061832() 不明 ntdll.dll!000007fa83fcd609() 不明 --------- いろいろアンインストールしてみたり試行中ですが、折を見て別HDDにOSをクリーンインストールして試してみます。
メンテ
Re: Windows8でVMDを読み込むと例外発生 ( No.7 )
名前:管理人 日時:2013/08/26 02:06

お試しいただきありがとうございます なるほど、VisualStudio2012 だったのですね、私も試してみます 載せて頂いたコールスタックを拝見する限りではvmdファイルの検索関係の処理で止まっているようです 読み込むPMDファイル・VMDファイルを置いているフォルダパスはどのようになっていますでしょうか? もしかしたらCドライブのルートフォルダ( C:\ )のような、浅いフォルダにファイルを入れた状態で 読み込むと本件のエラーが発生しないということがあるかもしれません
メンテ
Re: Windows8でVMDを読み込むと例外発生 ( No.8 )
名前:みょも 日時:2013/08/26 05:08

>もしかしたらCドライブのルートフォルダ( C:\ )のような、浅いフォルダにファイルを入れた状態で >読み込むと本件のエラーが発生しないということがあるかもしれません 試しにPMDとVMDのルートフォルダにおいてみましたが、状況に改善はみられませんでした。 ただご指摘の通りVisualStudio2012を使っていましたので、試しにアンインストールした後、 VS2010をインストール、DxlibSourceTestを再ダウンロードしてテストしてみたところ、 プラットフォームをx64に設定して実行しても正常に動作しました。 既存の自作プログラムはVS2010でロードできないので、 すぐに試せませんでしたが、以上取り急ぎご報告いたします。
メンテ
Re: Windows8でVMDを読み込むと例外発生 ( No.9 )
名前:管理人 日時:2013/08/27 00:27

ご返答ありがとうございます 私の環境でも VisualStudio2012 でエラーが発生しました ただ、一度だけで二度目以降はエラーが発生しなくなってしまいました 物理演算系に原因がある可能性もありますので、よろしければ MV1LoadModel を実行する前に MV1SetLoadModelUsePhysicsMode( DX_LOADMODEL_PHYSICS_DISABLE ); を実行して、物理演算を行わない設定でモデルを読み込むというのを試して頂けないでしょうか?
メンテ
Re: Windows8でVMDを読み込むと例外発生 ( No.10 )
名前:みょも 日時:2013/08/27 19:18

>MV1SetLoadModelUsePhysicsMode( DX_LOADMODEL_PHYSICS_DISABLE ); >を実行して、物理演算を行わない設定でモデルを読み込むというのを試して頂けないでしょうか? 試してみましたが、特に症状に変化なくエラー停止しました。
メンテ
Re: Windows8でVMDを読み込むと例外発生 ( No.11 )
名前:みょも 日時:2013/08/28 02:35

クリーンインストールしてビデオドライバだけ導入したWindows7/8の環境を用意して、 いくつか試してみました。 テストに用いたのはDxLibSourceTestです。 A: Win7上のVS2012で、x64プラットフォーム設定でコンパイルしたexe B: Win8上のVS2012で、x64プラットフォーム設定でコンパイルしたexe ○=正常動作 ×=エラー Win7(64bit版)上で実行: A○ B○ Win8(64bit版)上で実行: A× B× いずれの組み合わせでも、Win32プラットフォーム設定でコンパイルされたexeは問題ありませんでした。 PC固有の問題も疑い、古いPC(E6600 GF7900GS)にWin8(64bit版)をクリーンインストールしてテストした結果でも、 まったく同じ動作結果でした。
メンテ
Re: Windows8でVMDを読み込むと例外発生 ( No.12 )
名前:管理人 日時:2013/09/01 01:25

沢山のご情報ありがとうございます 原因がわかりました 「64bitのメモリアドレス値を32bitにキャストしていた」という凡ミスでした orz 例:64bit環境のポインタは64bit void *DataAddress; unsigned __int64 Address = ( unsigned __int64 * ) DataAddress; // <- 問題なし unsigned int Address2 = Address; // <- 問題あり Windows7 では64bitソフトを実行してもメモリ使用量が多くならない限りは 確保したメモリのアドレス値が32bitで表現できる値以下に収まっているようなのでエラーが発生せず、 ( 32bitで表現できるメモリアドレスの例: 0x000000003b655400 ) Windows8 ではメモリ使用量が多くなくても確保したメモリのアドレス値が32bitで表現できない大きな値になるようで、 ( 32bitで表現できないメモリアドレスの例: 0x00000082ffc15400 ) 結果 Windows7 では問題なく動作し、Windows8 ではエラーが発生するということでした お手数で申し訳ありませんが、よろしければこちらをお試しになってみてください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: Windows8でVMDを読み込むと例外発生 ( No.13 )
名前:みょも(解決) 日時:2013/09/01 05:53

Windows8ではメモリ管理に手を入れているようなのでそれがWin7との動作の差になったんですね。 早速確認してみたところ、Windows8(x64) VS2012のAnyCPU及びx64コンパイルで正常動作を確認しました。 ありがとうございました!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存