Re: ローカルで定義されたシンボルがフィクション ( No.1 ) |
- 名前:管理人 日時:2007/04/03 13:36
Dixqさんどうも、DXライブラリの管理人です。
MSDNで調べた限りでは以下の様になっていました。
http://msdn2.microsoft.com/ja-jp/library/atww7hec(VS.80).aspx
余り遭遇した経験の無い警告なのでどうやったら発生するのか
何かまずいことが起こるのかどうかはわかりません・・・
最初から発生していた訳ではないと思うのですが、何か思い当たる
点など無いでしょうか?
又、実際に何か不具合が発生しているのでしょうか?
|
Re: ローカルで定義されたシンボルがフィクション ( No.2 ) |
- 名前:GPGA 日時:2007/04/03 14:19
そもそも、DXライブラリを使用していて、exit関数を使用した場合
終了時のDxLib_End関数が呼ばれないと思いますが、その場合の動作の保証というのは
どうなのでしょうか?
例えば、DxLib_InitでOSの一部の設定(タイマーの分解能など)を変更していて
DxLib_Endでその設定を戻している、などということをしているのであれば、少々まずいと思われます。
終了するための関数を DxLib.h から探してみたのですが、特に見当たらなかったので
手段としてはあまりよろしくありませんが、PostMessage関数 を使用し ProcessMessage関数 で終了と判断させることで
終了時にDxLib_Endを通過することができました。
PostMessage(GetMainWindowHandle(), WM_DESTROY, 0, 0);
> 管理人さん
もし、プログラムの途中で強制的に終了させる関数が無いのであれば
作成されてはいかがでしょうか?
|
Re: ローカルで定義されたシンボルがフィクション ( No.3 ) |
- 名前:A 日時:2007/04/03 20:56
>Dixqさん
lib使用していると時々見かけますよ、その警告。
ライブラリ側のランタイムと、そのプロジェクトのランタイムの設定が一致していないのではないでしょうか。
>GPGAさん
必要でしょうか?
アプリ終了時には「すべてソフトを終了させる前にこの関数(DxLib_End)を呼ぶ必要があります。」と規定している以上、呼ばないのはユーザーの責任です。
exit()を使いたいなら、ラップして、DxLib_Endをコールしてから exit関数を呼ぶ関数を作ればいいだけなので、必要性はかなり微妙だと思います。
|
Re: ローカルで定義されたシンボルがフィクション ( No.4 ) |
- 名前:管理人 日時:2007/04/04 11:55
GPGAさん始めまして、DXライブラリの管理人です。
Aさんも仰られていますが、exit の前に DxLib_End を呼んで頂ければ問題ありません。
> そもそも、DXライブラリを使用していて、exit関数を使用した場合
> 終了時のDxLib_End関数が呼ばれないと思いますが、その場合の動作の保証というのは
> どうなのでしょうか?
95カーネルOS(Windows95,98,98SE,ME)ではその後の動作が不安定になると思いますが、
Windows2000 以降であれば恐らく特に問題は発生しないと思います。
> 例えば、DxLib_InitでOSの一部の設定(タイマーの分解能など)を変更していて
> DxLib_Endでその設定を戻している、などということをしているのであれば、少々まずいと思われます。
DxLib_End で timeEndPeriod を呼んでいなかったので呼ぶようにしました。orz
|
Re: ローカルで定義されたシンボルがフィクション ( No.5 ) |
- 名前:GPGA 日時:2007/04/05 11:48
> Aさんも仰られていますが、exit の前に DxLib_End を呼んで頂ければ問題ありません。
なるほど。
ソースのほうを見させていただきましたところ、WM_DESTROYで行っている処理は
ウインドウを破棄する旨をログに記録しているだけのようですね。
> 95カーネルOS(Windows95,98,98SE,ME)ではその後の動作が不安定になると思いますが、
> Windows2000 以降であれば恐らく特に問題は発生しないと思います。
これは、Windows2000以降はそのプロセスで使用されているメモリはプロセスが終了した時点で
OSが全て解放してくれるため、ということでしょうか?
|
Re: ローカルで定義されたシンボルがフィクション ( No.6 ) |
- 名前:管理人 日時:2007/04/08 13:57
GPGAさんどうも、DXライブラリの管理人です。
> これは、Windows2000以降はそのプロセスで使用されているメモリはプロセスが終了した時点で
> OSが全て解放してくれるため、ということでしょうか?
詳しくは分かっていないのであんまりはっきり申し上げることは出来ませんが、
DxLib_End を呼ばずに終了してもメモリリークや DirectX 関連のリソースが
残っている様子は無いので、恐らく・・・
|