トップページ > 過去ログ > 記事閲覧
ローカルで定義されたシンボルがフィクション
名前:Dixq 日時: 2007/04/03 10:42

いつもお世話になっています。 コンパイルしたところ、 1>main.obj : warning LNK4217: ローカルで定義されたシンボル _exit がフィクション _WinMain@16 にインポートされました。 1>battle_calc.obj : warning LNK4049: ローカルで定義されたシンボル _exit がインポートされました。 と表示されるのですが、この意味はなんなのでしょうか? どう対処したらいいでしょうか・・。 よろしくお願いします><

Page: 1 |

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 関連のリソースが 残っている様子は無いので、恐らく・・・

Page: 1 |