トップページ > 記事閲覧
Bootcamp+Windows7上での実行エラー
名前:Tozica 日時: 2013/07/25 15:21

こんにちは、いつもお世話になっています。 【現象】 11-inch MacBookAir (Mid-2013) 上にBootcampを用いて Windows7 Home-Premium SP1 をインストールした環境において、 DXライブラリを用いて作成したプログラムをその環境上で実行すると、 メモリアクセス違反が発生して落ちます。 詳しい状況としては、 ・WindosUpdateは全て当てている ・DirectXのバージョンも最新 ・DXライブラリも最新 ・エラーが発生するのは GetDrawStringWidthToHandle 関数実行時 (この時、フォントの初期化やフォントハンドルの読み込みは問題無く完了している) ・過去に作って、他の環境だと問題なく実行できているプログラムを実行しても同様のエラーが出るので、ソースコードの問題ではない ・過去に別のMacPCのBoocamp+Windows7環境上で実行した際には問題なく実行できていたので、恐らくBootcamp全体の問題ではない 以上のことから、恐らくハードウェアとの相性問題なのではないかと推測しているのですが、解決は可能でしょうか? 意見等いただけると大変ありがたいです。 以下にプログラム実行時のログ・ファイルを添付します。 よろしくお願いします。 ttps://dl.dropboxusercontent.com/u/8753761/Log.txt
メンテ

Page: 1 |

Re: Bootcamp+Windows7上での実行エラー ( No.1 )
名前:管理人 日時:2013/07/27 23:34

解決できるかどうかは分かりませんが、とりあえず3つほどご質問させてください 1.GetDrawStringWidthToHandle でエラーが発生するとのことですが、DrawStringToHandle は   正常に動作しますでしょうか? 2.CreateFontToHandle でフォント名は指定していますでしょうか? また、指定していなかった   場合、指定した場合も同様のエラーは発生しますでしょうか? 3.Bootcamp+Windows7上でお使いの開発環境を教えて頂けないでしょうか?( VisualStudio 2010 等 )
メンテ
Re: Bootcamp+Windows7上での実行エラー ( No.2 )
名前:Tozica 日時:2013/07/28 00:48

返信ありがとうございます。 3つの質問に対する回答としては以下のようになります。 1.先ほど試したところ、DrawStringToHandle も GetDrawStringWidthToHandle と同様のエラーが発生しました。   一方で、DrawString に関しては問題なく実行できました。 2.フォント名は、指定しています。   あるプログラムでは「メイリオ」を、   別のプログラムでは「Bienetresocial」という英字フォントを指定しています。   (そのどちらでもエラーは発生しています) 3.VisualC++ 2010 Express を使用しています。   過去に作ったプログラムも、別のPC上でではありますが、いずれも VisualC++ 2010 Express を用いてコンパイルしています。 お忙しいところ恐縮ですが、よろしくお願いします。
メンテ
Re: Bootcamp+Windows7上での実行エラー ( No.3 )
名前:管理人 日時:2013/07/28 00:52

ご返答ありがとうございます すみません、更にご質問です 1.フォントの指定を NULL や「MS ゴシック」にした場合もエラーは発生しますでしょうか? 2.フォントタイプは何を使用していますでしょうか?( DX_FONTTYPE_EDGE など )
メンテ
Re: Bootcamp+Windows7上での実行エラー ( No.4 )
名前:Tozica 日時:2013/07/28 01:29

返信ありがとうございます。 2つのご質問に関しては以下のとおりになります。 1.DrawStringToHandle のハンドル引数にNULLを与えた場合はエラーは発生しません。   一方、CreateFontToHandle のフォント名にNULLを与えて生成したハンドルを用いて   DrawStringToHandle を実行した場合にはエラーが発生します 2.普段は DX_FONTTYPE_ANTIALIASING を使用しています。   なお、先ほど、他のフォントタイプ(NORMAL,EDGE)に変えた場合も試してみましたが、   それらのフォントタイプにおいてもやはりエラーは発生しました。 よろしくお願いします。
メンテ
Re: Bootcamp+Windows7上での実行エラー ( No.5 )
名前:管理人 日時:2013/08/03 17:12

ご返答ありがとうございます 私も手元に購入してから殆ど使用していない Mac Mini があったので Bootcamp + Windows7 64bit の 環境を構築してテストしてみました 結果、特に問題なくフォントハンドルを使用した文字列を描画することができました 以下のようなシンプルなプログラムでもエラーが発生しますでしょうか? #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int FontHandle ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; FontHandle = CreateFontToHandle( "メイリオ", 32, 2, DX_FONTTYPE_ANTIALIASING ) ; DrawStringToHandle( 16, 16, "テスト文字列", GetColor( 255,255,255 ), FontHandle ) ; WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }
メンテ
Re: Bootcamp+Windows7上での実行エラー ( No.6 )
名前:Tozica 日時:2013/08/03 22:27

返信ありがとうございます。 大変なお手数をおかけしてしまっているようで、申し訳ないです。 上のコードをこちらでも試した結果、問題なく実行できました。 そこで、上のコードと、自分が普段使っているコードとの差異を少しずつ確認していった結果、次のような事が分かりました。 ・CreateMaskScreen() を呼び出したあとに文字列描画を行うとエラーが発生するようです  → CreateMaskScreen を実行しない場合はエラーが発生しませんでした ・全く同じソースコードでも、場合によってエラーが発生する場合と発生しない場合がある  → エラーが発生しうる状況でも、場合によってはエラーが発生せずに実行できてしまう時がある  → これにより、厳密なエラー発生条件を突き止めることが難しい状況です ・フォント関連の処理をクラス化したものを普段使っているのですが、それを使うとエラーの発生確率が高くなるようです  → クラスを使わずに DrawStringToHandle からのみ描画した場合はエラーは発生しませんでした ・エラー発生時のログを確認すると、フォントの初期化を2回行なっている場合がある 以下に調査時に使ったソースコードと、このコードでエラーが発生した時のログを添付しておきます。 よろしくお願いいたします。 ttps://dl.dropboxusercontent.com/u/8753761/main.cpp ttps://dl.dropboxusercontent.com/u/8753761/Log-0803.txt
メンテ
Re: Bootcamp+Windows7上での実行エラー ( No.7 )
名前:Tozica 日時:2013/08/06 03:21

こんにちは。お世話になっております。 あれから、 「一時的に *ToHandle 系の関数を全部ハンドルを使わない関数に置き換えれば実装作業は進められるのではないか」 と思い試していたのですが、どうやらDxLib云々よりも更に根の深い問題だったらしく、 全く同じバイナリなのに、実行する度に、関数の呼び出し時に(それがDxLibの関数でなくても)アクセス違反が起きたり起きなかったりする、 という現象に直面しました。 以上のことから、まずはそちらの問題を解決するのが先決だと思われることと、これ以上はDXライブラリの範疇を超える問題であることから、 ひとまずこのスレッドは解決済みということにさせていただきたいと思います。 管理人さま、たいへんお手数をおかけしてすみませんでした。ありがとうございました。またよろしくお願いします。 # 追記 (08/06 3:20) その後、DxLibを用いないプログラムでも同様の現象が発生するか試したのですが、全く発生しませんでした。 そこで「やはりDxLib由来の現象なのではないか」と思い、 今度はCreateMaskScreenおよびマスクを用いる処理をすべてコメントアウトした上で実行してみたところ、 フォントハンドルを用いた処理を含んでいる場合でもアクセス違反は発生しませんでした。 以上のことから、今回のアクセス違反は、 DxLibにおける、マスクに関する処理に由来していると考えるのが妥当なようです。 (プログラム起動ごとにエラー発生箇所が変化することから、バックグラウンドで実行されているような処理の中で発生している印象を受けます) というわけで、重ね重ねで申し訳ないですが、管理人さま、対応が可能であれば宜しくお願い致します。
メンテ
Re: Bootcamp+Windows7上での実行エラー ( No.8 )
名前:管理人 日時:2013/08/08 23:21

テストコードを Bootcamp 環境で何回も実行してみたのですが、どうしてもエラーが発生しません 今回再度別スレッドでマスク関係のバグを修正しましたので、よろしければこちらのバージョンを お試しになってみてください 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)」をして下さい) あと、上記バージョンでもエラーが発生してしまいましたら、 以下の「No.6でアップしていただいたプログラムをDXライブラリのソースと一緒にコンパイルして実行するプロジェクト」を Tozicaさんの VisualC++ 2010 Express 環境で実行していただき、エラーが発生したDXライブラリのソースファイル名と 行番号を教えて頂けないでしょうか? m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibSourceTest.exe あと、上記ファイルを解凍してできるフォルダの中に DxLibSourceTest.exe という、私の手元の環境でコンパイルした 実行ファイルがありますので、よろしければその実行ファイルを実行した場合もエラーが発生するかご確認頂けないでしょうか? お願いばかりで申し訳ありません・・・
メンテ
Re: Bootcamp+Windows7上での実行エラー ( No.9 )
名前:Tozica 日時:2013/08/09 22:27

こちらこそ、お忙しい中大変な時間を割いていただいて、申し訳ない限りです。 本当にありがとうございます。 わたし自身も長らく MacBookAir+Bootcamp+Windows7 という構成を利用していますが、今回のような現象は初めてですね。 MacBookAir-2013Med は、BootcampによるWin7のインストールの際にも固有のバグが存在していたので、 もしかすると、今回の問題もそれと同様にMacBookAir-2013Med特有の現象なのかな、と少し思っています。 MacMiniでエラーが発生しなかったのも、そういう理由かも知れません。 さて、実行結果に関してですが、 【1】新しいライブラリを試した結果: 今まで通りエラーが発生しました 【2】DxLibSourceTestの実行ファイルを実行した結果: やっぱりエラーが発生しました 【3】エラーが発生した箇所の調査: ttps://dl.dropboxusercontent.com/u/8753761/CallStack-0809.txt にエラー発生時のコールスタックを纏めました。 わたしにはどこが原因でエラーになっているのか全く分からないのですが、参考にしていただければと思います。 もし何か追加で必要な情報があれば遠慮なく申し付けてください。 よろしくお願いします。
メンテ
Re: Bootcamp+Windows7上での実行エラー ( No.10 )
名前:管理人 日時:2013/08/11 14:59

テストして頂きありがとうございます ただ、アップしていただいたコールスタックを拝見する限りでは ごく普通の Direct3D API の呼び出しでエラーが発生しているようで( パラメータも問題はなさそうです ) 現時点では環境固有の問題である可能性が高いとしか申し上げられません この現象に対処するには現象が再現できる環境を手元に持ってきて 徹底的に調べないと厳しいです なので、とりあえず「エラーが発生しない環境にする」方が現実的だと思います よろしければ以下のことを試してみてください m(_ _;m Windows Update は全て当てているとのことでしたが、私が Bootcamp 環境を 構築した際は一度 Windows Update でアップデート項目を全選択して実行した後、 再度 Windows Update を実行すると前回の実行では表示されなかった更新項目が表示される・・・ というのが何回もあり、結局「更新プログラムの確認」を行っても一つも検出されなくなるまでには 5回くらい Windows Update を実行しました Tozicaさんの環境でも「更新プログラムの確認」を行っても何も表示されない状態になっていますでしょうか? Windows Update には OS 自体の更新だけをチェックするか、 VisualStudio や Office などの OS 以外の Microsoft 製品の更新もチェックするかを 設定で変更できたと思いますが、後者の設定になっていますでしょうか? DirectX のバージョンは最新とのことですが、よろしければ今一度こちら http://www.microsoft.com/ja-jp/download/details.aspx?id=35 のページからダウンロードできる Web インストーラを実行してみて 頂けないでしょうか? Intel(R) HD Graphics 5000 のドライバが原因である可能性もありますので、 よろしければこちら https://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&DwnldID=22842&lang=eng&OSVersion=Windows%207%20(64-bit)*&DownloadType=%0A%09%09%09%09%09%09%09Drivers%0A%09%09%09%09%09%09 から、最新のドライバをインストールしてみてください
メンテ
Re: Bootcamp+Windows7上での実行エラー ( No.11 )
名前:Tozica(解決) 日時:2013/08/12 01:50

なるほど、そうですか…。 先ほどドライバなどもひと通りアップデートした上でもう一度試してみましたが、やはり駄目なようなので、 ひとまずマスク機能を使わないようにして制作を続けようと思います。 それでは改めて、このスレッドは解決済みということにしたいと思います。 大変お手数をおかけしました。お時間を割いていただき本当にありがとうございました。 また何かありましたらよろしくお願いします。
メンテ

Page: 1 |

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

   クッキー保存