Re: DxLib_End の二重呼び出し ( No.1 ) |
- 名前:通 日時:2007/12/02 21:36
問題があるか否かはライブラリの実装に依存しますが、プログラミングする上で、このようなライブラリの作りに依存した処理を作りこむのは得策では
ないでしょう。このあたりに依存しない様にする
には、ひとつ皮をかぶせて使えばある程度回避
できます。
回避策としては、たとえば以下のように
DxLib_Init関数が呼び出されたかどうかを
プログラム側でフラグを作って管理します。
static int gInitDxLib = 0;
/*
* 初期化に失敗したら-1,(0未満)
* 成功したらこの初期化関数が呼び出された回数を返す(0以上)
*/
int InitDxLib( void )
{
if ( gInitDxLib != 0 ){
return (gInitDxLib++);
}
/* まだ初期化されていないので初期化する */
if( DxLib_Init() == -1 ){
return -1;
}
retunr (gInitDxLib++);
}
/*
* 初期化関数を呼び出ししていなければ-1、(0未満)
* 成功したらこの関数を呼び出さなければならない回数を返す(0以上)
*/
int EndDxLib( void )
{
if( gInitDxLib <= 0 ){
return -1;
}
gInitDxLib--;
if ( gInitDxLib == 0 ){
DxLib_End();
}
return gInitDxLib;
}
#回数にしていいますが、別にカウントする必要が
#無ければただの0と1でも問題ないでしょう。
|
Re: DxLib_End の二重呼び出し ( No.2 ) |
- 名前:優柔不断 日時:2007/12/03 00:14
確実にプログラム終了時にDxLib_End();を呼び出す方法。
void end()
{
DxLib_End();
}
〜
atexit(end);
〜
WinMainのreturn ←ここでend()が呼ばれる
とするといいのではないでしょうか?
atexitはプログラム終了時に呼び出す関数を登録する関数です。
|
Re: DxLib_End の二重呼び出し ( No.3 ) |
- 名前:管理人 日時:2007/12/03 01:59
とりあえず、DxLib_End を連続で何回実行しても問題はありません。
|
Re: DxLib_End の二重呼び出し ( No.4 ) |
- 名前:匿名希望 日時:2007/12/03 02:33
通さん、優柔不断さんのような解決策も考えてはみましたが、
実はそもそもライブラリ本体でそれに相当する機能もあるのでは?
と思いスレッドを立てた次第でした(^^;
そう書いておけば良かったですね orz
管理人さんの発言を受けて安心しました。
どうもありがとうございました。
|
Re: DxLib_End の二重呼び出し ( No.5 ) |
- 名前:通 日時:2007/12/03 10:26
>実はそもそもライブラリ本体でそれに相当する
>機能もあるのでは?と思い
先に書いたとおり、ライブラリのつくりに依存する
のはあまり良い作り方ではありません。
他のライブラリなどを使う場合などがあれば、
また悩む事にならないように今後の参考になれば。
:−)
|