シューティングゲームの館で・・・

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

シューティングゲームの館で・・・

#1

投稿記事 by RYU2 » 17年前

こんばんは、初投稿です。
いきなりすみませんが不思議に思ったことがあるので質問させてもらいます。

まず、自分の環境ですが、
OS:VISTA
開発環境:BCC Developer(VC++はなぜか動かないので・・)

独学でCを勉強していて、ポインタと構造体を大体理解することはできました。
そこで、コンソールアプリに飽きてしまって^^;ゲームを作ろうと思いこのページを見て勉強していました。

それで、シューティングゲームの館を見ていて、例を使ってみていたところ、
(8)「ショットを打つ」 で、

/* main.cpp */

#include "DxLib.h"
#include "GlobalVariable.h"


int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){

extern void img_sound_load();
extern void initialization();
extern void SetColor();
extern void Background();
extern void PlayerShotCalc();
extern void PlayerShotDisp();
extern void PlayerControl();
extern void EnemyControl();
extern void EnemyCalcDisp();
extern void EnemyShotControl();
extern void EnemyShotCalcDisp();
extern void CollisionDetection();
extern void Background2();
extern void FpsTimeFanction();
int RefreshTime=0;

// ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) return -1;

SetDrawScreen( DX_SCREEN_BACK ) ; //裏画面を使用する。

のように打ったところ、メイク(デバッグ)時に、

Error: 外部シンボル '_img_sound_load' が未解決(C:\WORK\BCC\MAIN\DEBUG\MAIN.OBJ が参照)
Error: 外部シンボル '_initialization' が未解決(C:\WORK\BCC\MAIN\DEBUG\MAIN.OBJ が参照)
(これがFpsTimeFantion();まで続きます)

となってしまいます。


そこで、extern宣言をすべてヘッダファイルに移したらどうなるかな?? と思い
GlobalVariable.hのほうに移してみたところ、正常に動きました。

ちゃんと動いたのでよかったのですが、原因が気になったので質問しました。
どなたかわかる方、教えてください。

長文ですみませんでした。

Justy

Re:シューティングゲームの館で・・・

#2

投稿記事 by Justy » 17年前

 過去ログより。

http://www.play21.jp/board/formz.cgi?ac ... q&rln=6294

 一応エラーになる直接的な原因は分かっていますが、BCCがどうしてこういう仕様にしているかは
わかりません。

RYU2

Re:シューティングゲームの館で・・・

#3

投稿記事 by RYU2 » 17年前

Justyさん、本当にありがとうございます。

完璧には理解できませんでしたが、とりあえずBCCを使うときは
Main関数内でextern宣言してはいけないということがわかりました。

//

VC++2008ExpressEditionを本当はBCCよりも先にダウンロードしたのでVC++を使いたいのですが、
コンソールアプリはできるのに、DXライブラリ関係のことをするとこれまたなぜか使えないのです;;

で、仕方なくBCCを使っていました。
(実際使いやすかったのですが・・)

でもやっぱりVC++も使いたいので質問させてもらいます。

例として
#include "DxLib.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {

	ChangeWindowMode(TRUE);

	if(DxLib_Init() == -1) return -1;
	DrawPixel(240, 240, 0xffff);
	WaitKey();
	DxLib_End();

	return 0;
}
のような簡単なプログラムをVC++で作ったのですが、
デバッグすると

warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。

というエラーが出ます。

DXライブラリの本家のサイトに書いてあったとおりにしたはずなのにエラーが出ます。

なので、一度
「プロジェクト」→「プロパティ」→「構成プロパティ」→「全般」より

「マルチバイト文字セットを使用する」を変更し「Unicode文字セットを使用する」に変更して見たのですが、
やはり同様のエラーが出ます。

上記のエラーでググってみたのですが、理解できませんでした。
どなたか教えてください。

よろしくお願いします。

tk-xleader

Re:シューティングゲームの館で・・・

#4

投稿記事 by tk-xleader » 17年前

>warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。

これはエラーではありませんよ。単なる警告です。
マルチバイトの設定で間違いありません。「Unicode文字セットを使用する」ではそれこそエラーが出てしまいます。

メニュー→「デバッグ」→「デバッグなしで開始」で実行できないんですよね?

Justy

Re:シューティングゲームの館で・・・

#5

投稿記事 by Justy » 17年前

>とりあえずBCCを使うときは
>Main関数内でextern宣言してはいけないということがわかりました
 かなりレアなんですよね、この問題って。
 通常関数内で externすること自体が珍しいですし、仮にしても大抵の場合は問題なく
動作するわけで。


>warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。
>データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
>というエラーが出ます。
 エラーじゃないです。警告です。
 多分ビルド自体は成功しているので、実行もできるはずです。

 この警告は対象のソースコードの中にそのファイルの文字コードでは扱えない文字が存在する場合に
出るのですが、 VC2005の時はバグでその警告が出てしまうケースが多々ありました。

 しかし、VC2008だとなると本当に扱えない文字がソースコード中にある可能性があります。
 例えばソースコードが Shift-JISで書かれているのにShift-JISでは扱えない文字が入っているとか。

 その警告が出るソースを提示して頂ければ、どこに問題があるのか見つけられると思いますが、
とりあえず以下のどれかを試してみて下さい。

・  VisualStudio上でそのファイルを開き、適当なところに1文字空白を挿入し、
その文字をdeleteキーで消したあと保存。

・ VisualStudio上でそのファイルを開き、先頭付近にある /* */コメントの中で
1文字空白を入れて保存

・ VisualStudioか適当なエディターを使って Unicodeで保存し直す

 これでビルドして警告が出なくなれば成功ですが、まだ出るようでしたら
そのソースを見ないと何とも言えません。


 ちなみにあまりお薦めはできませんが、最後の手段として警告を黙らせる方法もあります。
 警告対象のソースに

#pragma warning(disable : 4819)
 を入れて下さい。
 これで、C4819の警告は出なくなります。

bodomcross

Re:シューティングゲームの館で・・・

#6

投稿記事 by bodomcross » 17年前

私もBCCを使っていましたが

VC2005++EEに変更したときに、最初は躓きました

まず、マルチスレッドデバックでしたか・・・ あれの設定しわすれと

プロジェクトを作成するときに、コンソールアプリを選んでたのが原因でした

Dxライブラリを使うときは、Win32プロジェクトで、Windowsアプリケーションを指定し

空のプロジェクトを作ってしています

当方も初心者なので、参考程度にしてくださいね^^

RYU2

Re:シューティングゲームの館で・・・

#7

投稿記事 by RYU2 » 17年前

皆さん、回答本当にありがとうございます。

まず、Justyさんが教えてくれた
>・  VisualStudio上でそのファイルを開き、適当なところに1文字空白を挿入し、
その文字をdeleteキーで消したあと保存。

>・ VisualStudio上でそのファイルを開き、先頭付近にある /* */コメントの中で
1文字空白を入れて保存。

をしてみましたが、やはり警告が出ます・・


>・ VisualStudioか適当なエディターを使って Unicodeで保存し直す

ということをしてみようと思いましたが、Word2007で保存しなおす方法がいまいちわかりません。
またググってみたのですが、Word2007について詳しく書いてあるページが少なくわかりませんでした。

そこで、tkmakwins15さんが教えてくれた
>メニュー→「デバッグ」→「デバッグなしで開始」で実行できないんですよね?

という方法を使ったところ、警告は出なくなりました!


が、実行できません。何でかなぁ?と思っていたら、もうひとつのエラーを見落としていました。
本当に申し訳ありません。

error PRJ0003 : 'rc.exe' の起動中にエラーが発生しました。

というエラーです。

このことについてはここで既出でしたが↓
http://www.play21.jp/board/formz.cgi?ac ... &rln=15314

具体的な解決法が出ていなかったので、またまたググってみたのですが、
やはりよくわかりませんでした。

どなたか教えてください。 よろしくお願いします。

RYU2

Re:シューティングゲームの館で・・・

#8

投稿記事 by RYU2 » 17年前

何度もすみません。

今マイクロソフトのサイトで、WindowsSDKというものを見つけたので、
試しにダウンロードしてみます。

RYU2

Re:シューティングゲームの館で・・・

#9

投稿記事 by RYU2 » 17年前

こんばんわ。

ようやくWindowsSDKを入手できました!

入手した後、もう一度
#include "DxLib.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {

	ChangeWindowMode(TRUE);

	if(DxLib_Init() == -1) return -1;
	DrawPixel(240, 240, 0xffff);
	WaitKey();
	DxLib_End();

	return 0;
}
を入力し、「デバッグ開始」をしたところ、うまくいきました!

何故か
warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。

の警告まで出なくなりました。
WindowsSDKは偉大なんだなぁと思いました(笑)

これで自分もVC++を使えます。

質問に答えてくれた皆さん、本当にありがとうございました!

閉鎖

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