トップページ > 過去ログ > 記事閲覧
大至急お聞きしたいんですが
名前:淳一 日時: 2008/10/07 11:26

ちょっと聞きたいんですが。 dxlibを使っていますが、C言語の標準ライブラリのscanfの関数とか使えなくなります。。。 なんか、エラーがでてきましたが、 warning LNK4217: ローカルで定義されたシンボル _fclose がフィクション "void __cdecl GameDataInit(void)" (?GameDataInit@@YAXXZ) にインポートされました。 1>GameInit.obj : warning LNK4217: ローカルで定義されたシンボル _fopen がフィクション "void __cdecl GameDataInit(void)" (?GameDataInit@@YAXXZ) にインポートされました。 1>GameInit.obj : error LNK2019: 未解決の外部シンボル __imp__fscanf が関数 "void __cdecl GameDataInit(void)" (?GameDataInit@@YAXXZ) で参照されました。 今、ゲームのステータスとマップ情報は全部テキストファイルで読み込んで実装する予定なんですが、うまくいけません。 もし知っている方いれば、教えていただけませんか。今、RPGゲーム作っていますが、初期化データをテキストデータからメモリに読み込みしたいから、fscanfを使いたいのです。

Page: 1 |

Re: 大至急お聞きしたいんですが ( No.1 )
名前: 日時:2008/10/07 13:00

雑談のほうにも書いたのですが、 まず、環境を教えてください。 できれば、該当のGameDataInit関数のコードも あると良いかも知れません。 メッセージ的にVC2008でしょうか? 見た感じリンクエラーっぽいですが、 プロジェクトの作成は1から行った物でしょうか? であれば、HPに紹介されている設定をもう一度 見直すほうが良いかもしれません。
Re: 大至急お聞きしたいんですが ( No.2 )
名前:淳一 日時:2008/10/07 16:52

通さん ご返事ありがとうございます。 初めてプログラムについて問題聞きますから、雑談的な質問ですみません。 環境: VisualC++ 2005 Express Edition OSはwindows XP さっきの言ったソースはモジュール分割もして、なかなか説明しにくいですが。 今、↓に簡単なソースを書きましたが。 #include<stdio.h> #include "DxLib.h" // WinMain関数 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int A = 0 ; int Cr ; // DXライブラリの初期化 if( DxLib_Init() == -1 ) return 0; // 白の色コードを保存 Cr = GetColor( 255 , 255, 255 ) ; FILE *fThePowerIsEnemy; if((fThePowerIsEnemy=fopen("ThePowerIsEnemy.txt","r"))==NULL) DrawString( 0 , 0 , "error" , Cr ) { fscanf( fThePowerIsEnemy, "%d",&A); } fclose(fThePowerIsEnemy); DrawFormatString( 0, 80, Cr, "読み込んだデータは%d", A ) ; // ボタンが押されるまで待つ WaitKey() ; // DXライブラリ使用の終了 DxLib_End() ; return 0 ; } ↑プロジェクトフォルダの中に、ThePowerIsEnemy.txtってファイルが入ってます。内容は数字の1;でも、読み込むすらできませんが。 なんか問題ありますか?
Re: 大至急お聞きしたいんですが ( No.3 )
名前: 日時:2008/10/07 17:20

現状はコンパイルが通って、 いないという事で良いですか? もう一度聞きますが、 プロジェクトの作成は1から行った物でしょうか? 標準ライブラリ系のリンクが対象外になっていると CRTライブラリに含まれる関数(scanfなど)が 使用できなくなります。 いま手元に2005をインストールしている環境が 無いので帰ったら試してみますが、 ぱっとみ、 >if((fThePowerIsEnemy=fopen("ThePowerIsEnemy.txt","r"))==NULL) >DrawString( 0 , 0 , "error" , Cr ) >{ これはコンパイルエラーでは。。。?
Re: 大至急お聞きしたいんですが ( No.4 )
名前:キーチック 日時:2008/10/07 18:08

2005になると,fscanfも使えますが,セキュリティの関係上 fscanf_s を使えと言ってきたはずですが あとはヘルプ参照でいけると思います
Re: 大至急お聞きしたいんですが ( No.5 )
名前:淳一 日時:2008/10/08 01:26

通さん、キーチックさん ご返事ありがとうございます。 今バイトから帰ったばかりのでコメント遅れてすみませんでした。 無事できました!!!! さっきトップぺーじのDXライブラリの使い方のところにしたがって一からも一回設定しましたが、今回無事できていました。 実は前の間200百時間ぐらいずっとこのままの設定でゲーム作っていましたけど、たぶん標準関数使っていなかったから、なにも問題なかったんです。 win32コンソールアプリケーションじゃなくて、空のプロジェクトを作成してプログラムを書いてたんです。今回いろいろ設定をして、win32コンソールアプリケーションでプロジェクトを使って標準関数また使えるようになった。 ちなみに、>if((fThePowerIsEnemy=fopen("ThePowerIsEnemy.txt","r"))==NULL) >DrawString( 0 , 0 , "error" , Cr ) >{ 貼り付けるの時に、DrawString( 0 , 0 , "error" , Cr ) の後ろ”;”がわすれて、すみません。^^; 今このプログラムは無事コンパイルできるから助かります!!! RPgを作っていますが、ダンジュン系ですから、大量のマップチップのデータをいろいろ書き込みたいし、セーブのために標準関数も欠かせないんですから、すごくあせていました。汗 どうも、返事ありがとうございます。
Re: 大至急お聞きしたいんですが ( No.6 )
名前: 日時:2008/10/08 02:29

>後ろ”;”がわすれて そこにセミコロンを入れるとif文がそこで 完結してしまうので、次のブロック演算子{}の 中の処理はfopenが失敗しても成功しても、 行われてしまいます。

Page: 1 |