ページ 11

初期化に失敗したらダイアログを表示するには?

Posted: 2012年10月29日(月) 19:42
by crimsonwings
はじめまして。Def*rai と言います。
プログラム初心者なのですが、エラーとかが起きたらダイアログを出して終了する、みたいなプログラムを書きたいのですが、
どうやって実現出来るのか分かりません。
そもそも、DXライブラリでそんな関数があるのでしょうか?
教えて下さい。

Re: 初期化に失敗したらダイアログを表示するには?

Posted: 2012年10月29日(月) 20:09
by nil
ダイアログならWin32 APIのMessageBox関数を使えば表示できます。
終了はメインループからbreakするだけです。

Re: 初期化に失敗したらダイアログを表示するには?

Posted: 2012年10月30日(火) 17:23
by nullptr
assertマクロというのも手です

Re: 初期化に失敗したらダイアログを表示するには?

Posted: 2012年10月30日(火) 21:22
by みけCAT
新月の獅子 さんが書きました:assertマクロというのも手です
DXライブラリでassertを使うと、DxLib_End関数が呼ばれずに不都合が起きる可能性があると考えられます。

Re: 初期化に失敗したらダイアログを表示するには?

Posted: 2012年10月31日(水) 19:12
by Suikaba
みけCAT さんが書きました:
新月の獅子 さんが書きました:assertマクロというのも手です
DXライブラリでassertを使うと、DxLib_End関数が呼ばれずに不都合が起きる可能性があると考えられます。
DxLibの初期化クラスを作って、コンストラクタでDxLib_Init、デストラクタでDxLib_Endを呼ぶ、ってのではダメなんでしょうか。

Re: 初期化に失敗したらダイアログを表示するには?

Posted: 2012年10月31日(水) 21:13
by みけCAT
Suikaba さんが書きました:
みけCAT さんが書きました:
新月の獅子 さんが書きました:assertマクロというのも手です
DXライブラリでassertを使うと、DxLib_End関数が呼ばれずに不都合が起きる可能性があると考えられます。
DxLibの初期化クラスを作って、コンストラクタでDxLib_Init、デストラクタでDxLib_Endを呼ぶ、ってのではダメなんでしょうか。
実験してみました。
assertを使うと、デストラクタは呼ばれません。

コード:

#include <cstdio>
#include <cassert>
 
class testClass {
    public:
        testClass() {
            puts("DxLib_Init");fflush(stdout);
        }
        ~testClass() {
            puts("DxLib_End");fflush(stdout);
        }
        void testFunction() {
            puts("testFunction Called");fflush(stdout);
        }
};
 
int main(void) {
    int a=0;
    testClass tc;
    scanf("%d",&a);
    tc.testFunction();
    assert(a);
    tc.testFunction();
    return 0;
}
http://ideone.com/266LCl

Re: 初期化に失敗したらダイアログを表示するには?

Posted: 2012年10月31日(水) 21:19
by みけCAT
assertではなく、MessageBoxでメッセージを表示→DxLib_End→ExitProcess
とする関数を自作して使用するのも手です。

実装例 ※テストしていません

コード:

void aboutProgram(void) {
    MessageBox(GetMainWindowHandle(),"エラーが発生しました。終了します。","error",MB_OK | MB_ICONSTOP);
    DxLib_End();
    ExitProcess(0);
}
条件が偽だったら終了する実装例 ※テストしていません

コード:

void myAssert(int statement) {
    if(statement)return;
    MessageBox(GetMainWindowHandle(),"エラーが発生しました。終了します。","error",MB_OK | MB_ICONSTOP);
    DxLib_End();
    ExitProcess(0);
}

Re: 初期化に失敗したらダイアログを表示するには?

Posted: 2012年10月31日(水) 21:23
by Suikaba
assertはデストラクタも呼ばれないんですね、ありがとうございます。