ページ 1 / 1
初期化に失敗したらダイアログを表示するには?
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はデストラクタも呼ばれないんですね、ありがとうございます。