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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
crimsonwings

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

#1

投稿記事 by crimsonwings » 7年前

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

nil
記事: 428
登録日時: 8年前

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

#2

投稿記事 by nil » 7年前

ダイアログならWin32 APIのMessageBox関数を使えば表示できます。
終了はメインループからbreakするだけです。

アバター
nullptr
記事: 239
登録日時: 8年前

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

#3

投稿記事 by nullptr » 7年前

assertマクロというのも手です
 
 
✜ で C ご ✜
: す + 注 :
¦ か + 文 ¦
?
Is the は :
order C++? ✜
     糸冬   
  ――――――――
  制作・著作 NHK
 
 

アバター
みけCAT
記事: 6247
登録日時: 9年前
住所: 千葉県
連絡を取る:

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

#4

投稿記事 by みけCAT » 7年前

新月の獅子 さんが書きました:assertマクロというのも手です
DXライブラリでassertを使うと、DxLib_End関数が呼ばれずに不都合が起きる可能性があると考えられます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Suikaba
記事: 194
登録日時: 9年前

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

#5

投稿記事 by Suikaba » 7年前

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

アバター
みけCAT
記事: 6247
登録日時: 9年前
住所: 千葉県
連絡を取る:

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

#6

投稿記事 by みけCAT » 7年前

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
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6247
登録日時: 9年前
住所: 千葉県
連絡を取る:

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

#7

投稿記事 by みけCAT » 7年前

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);
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Suikaba
記事: 194
登録日時: 9年前

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

#8

投稿記事 by Suikaba » 7年前

assertはデストラクタも呼ばれないんですね、ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る