トップページ > 過去ログ > 記事閲覧
DxLib_End後の挙動(解決)
名前:南山まさかず 日時: 2012/01/26 18:01

 失礼します。南山まさかずです。少しわからない ことがあったので僭越ながら報告させていただきま す。  と言うのも、タイトルの通りなんですけれども、 DxLib_Endを呼び出した後の挙動と言うのはどうなっ ているのかと思いまして。  今作っているプログラムの中で、次のようなコー ドを書いています。 void Check(void){ /* *ここで条件チェック */ DxLib_End(); } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd){ /*いろいろな処理*/ while(!ProcessMessage()){ /*いろいろな処理*/ FastTime=GetNowCount(); /*いろいろな処理*/ }DxLib_End(); return 0; }  細かいところを除いたら上のようになります。コ メントのところには実際に何か処理が入っていると 思ってくだされば幸いです。  さて、いよいよと言うか本題なのですが、上で言 うとCheck関数でDxLib_Endが実行された後、 GetNowCountでアクセス違反が発生します。 GetNowCount以前にもGetDateTimeなどいろいろな処 理を行っているのですが、他の関数ではアクセス違 反は発生せず、戻り値も正常値(0)でした。  そもそもDxLib_End後にDxライブラリの関数を使う ことが間違っているのでしょうけれど、それにして も納得いきません。  DxLib_End後の動作として正常なのはGetNowCount のようなアクセス違反となるような動作なのでしょ うか?それとも他の関数(ProcessMessageを除く)のよ うに0を返す動作なのでしょうか?  注:ちなみに上記コードでは、DxLib_End後にexit 関数を呼ぶことによりアクセス違反を回避しまし た。

Page: 1 |

Re: DxLib_End後の挙動 ( No.1 )
名前:いっち 日時:2012/01/24 19:35

> DxLib_Endを呼び出した後の挙動と言うのはどうなっ > ているのかと思いまして。 おそらく、ほとんどの関数はただ単に何の動作保証も無いだけだと思います。 戻り値の意味や、アクセス違反が起きるか等何も決まっていないのではないでしょうか。
Re: DxLib_End後の挙動 ( No.2 )
名前:南山まさかず 日時:2012/01/25 18:00

 いっちさん、ありがとうございます。  やはり、DxLib_End後にDxライブラリの関数を動か そうとすることが間違っているのでしょうか……。  実は上の方法はDxLib関連のあるHPを見ているとき に見たものです。なのでこれで簡単に終了処理が出 来るのかなーと、勝手に推測してまして。  今後はDxLib_End後にDxライブラリの関数を実行す ることは極力避けるようにします。  どうもありがとうございました。
Re: DxLib_End後の挙動 ( No.3 )
名前:いっち 日時:2012/01/25 23:45

>  やはり、DxLib_End後にDxライブラリの関数を動か > そうとすることが間違っているのでしょうか……。 すべての関数で DxLib_End 後の呼び出しに動作保証するためのコストとメリットがつりあうようには個人的には思えません。 >  今後はDxLib_End後にDxライブラリの関数を実行す > ることは極力避けるようにします。 避けるというのであれば、複数箇所で DxLib_End を行う事自体を避けたほうが良いと思います。
Re: DxLib_End後の挙動 ( No.4 )
名前:南山まさかず 日時:2012/01/26 18:00

 いっちさん、ありがとうございます。確かに仰ら れる通りです。  十分気をつけて行きたいと思います。
Re: DxLib_End後の挙動(解決) ( No.5 )
名前:管理人 日時:2012/01/29 06:06

DxLib_End 後の動作保証はありませんが、 とりあえず GetNowCount では不正な処理が発生しないようにしました もしご必要でしたらダウンロードしてください 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/DxLibGCCTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
Re: DxLib_End後の挙動(解決) ( No.6 )
名前:南山まさかず 日時:2012/01/30 20:59

 わざわざ対応ありがとうございます。  3.07aに移行させていただきました。  追記: SendMessage(GetMainWindowHandle(),WM_CLOSE);  を条件を満たした時に実行するようにして対処しました。

Page: 1 |