ページ 11

ビルドできない。

Posted: 2010年8月28日(土) 15:23
by
ビジュアルC++で、タブみたいなので、複数のプログラムを同時に見ることが出来るようなので活用しようとしたら、複数あるタブのうち、2枚目や3枚目のタブが上手く実行できません。F5でビルドすると、 _WinMain@16はすでに1枚めのタブで定義されています。と出てきてビルドエラーになります。正直なにが原因なのかすら判らない状況です。それぞれのタブの中のプログラムだけであれば、(複数のタブを同時に開かなければ)ちゃんと実行できるのですが...

Re:ビルドできない。

Posted: 2010年8月28日(土) 15:32
by
すいません追記です。
”_WinMain@16はすでに1枚めのタブで定義されています。”の部分ですが、実際には、
”_WinMain@16はファイル名.objで定義されています。”と出てきてました。すいません。また、ファイルをまたいだ別のスクリプトも、同様に一枚目のタブのスクリプトが入っているファイル名.objで定義されていると出てきます。

Re:ビルドできない。

Posted: 2010年8月28日(土) 16:13
by dic
WinMainが2つありませんか?
あと、開発環境を書いておいてください

//===============================================================
ビジュアルC++とありますね
もう少し詳しく書くとフォローしてくれる方があらわれるかもしれません
失礼しました
画像

Re:ビルドできない。

Posted: 2010年8月28日(土) 18:21
by シエル
エラーのままだと思います。
WinMainが2つ以上定義されていることが原因と思われます。

まあ2010は使ったことないので、詳しいことは分かりませんが。

Re:ビルドできない。

Posted: 2010年8月29日(日) 12:41
by
すいませんWinMainって何ですか。あまりにも初心者過ぎて開発環境とかいわれても何の子とかさっぱり分からないのですが...本当にすいません。

Re:ビルドできない。

Posted: 2010年8月29日(日) 12:52
by softya
ゲームプログラミングの館から画像をお借りしてきました。
http://dixq.net/g/00.html
画面の中にWinMainと言うのが見えると思います。

こんなやつ↓
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){

これは1つのプロジェクトに1つしか許されません。

>”_WinMain@16はファイル名.objで定義されています。”と出てきてました。すいません。また、ファイルをまたいだ別のスクリプトも、同様に一枚目のタブのスクリプトが入っているファイル名.objで定義されていると出てきます。

このエラーは、WinMain関数が2つある場合に出るエラーですので、2つあるタブと言うのにそれぞれWinMainがある状況じゃないでしょうか?
解決方法は2つ以上作らないことなのですが、何をしたくてこうなってしまったか書いてもらえるとアドバイスがしやすいです。参考にしているサイトを書いてもらった方が良いですね。

Re:ビルドできない。

Posted: 2010年8月29日(日) 13:06
by
参考にしているのは、このサイトのプログラミングの館の方です。
サンプルスクリプト2つを一つにまとめたくて、タブに開きながら作業していたのですが、実行しようとしても上手くいかなかった。ということです。正直片方が実行できればいいので、現在はプログラムを片方メモ帳に移して作業しているのですが、今後複数のスクリプトを一つのプロジェクトにまとめたいときのためにここに質問させていただきました。どうすれば一つのプロジェクトの中で複数のスクリプトを実行できるように出来ますか?
分かりにくいので言葉を足させていただくと、トップのスクリプトから、条件で別のスクリプトに飛んで別の処理をするようなソフトを作りたいのです。丁度ゲームなんかだと、メニューから選んだ項目によってぜんぜん別のことをしますよね。そういうスクリプトを一つの.ccpのファイルに入れると見辛くなりそうなので。

Re:ビルドできない。

Posted: 2010年8月29日(日) 13:10
by シエル
C言語の基礎を学んだほうが良さそうです。

ファイル分割などでググって調べてください。

Re:ビルドできない。

Posted: 2010年8月29日(日) 13:18
by
了解しました。回答ありがとうございました。

Re:ビルドできない。

Posted: 2010年8月29日(日) 13:18
by
解決マークを入れ忘れました。

Re:ビルドできない。

Posted: 2010年8月29日(日) 13:24
by
すいません。winmainの前にexternを入れればいいって事ですか?出来れば回答ください。

Re:ビルドできない。

Posted: 2010年8月29日(日) 13:26
by シエル
違います。softyaさんがおっしゃってることを読み直してください。

Re:ビルドできない。

Posted: 2010年8月29日(日) 13:27
by シエル
ここをしっかり熟読してください。
http://dixq.net/g/02.html

Re:ビルドできない。

Posted: 2010年8月29日(日) 13:36
by softya
タイトル、本編、エンディングなどを別々のファイルにまとめたいと言うことであれば、シエル さんも書いているファイル分割と言う技法が必要となります。
検索キーワードとしては「ファイル分割 C言語」が適切だと思います。

ただ、このファイル分割のためにはC言語の関数の仕組みをちゃんと理解している必要があります。
WinMainって辺りから調べてみてください。

ちなみC言語などのコンパイル型のプログラム場合はプログラムのコードをスクリプトと呼ばずにソースコードと呼びます。プログラムコードをスクリプトと呼ぶのは、HSP,javascript,PHP,Perl,Ruby,Phythonなどインタプリタ型言語が一般的でしょうか。

Re:ビルドできない。

Posted: 2010年8月29日(日) 13:39
by softya
>すいません。winmainの前にexternを入れればいいって事ですか?出来れば回答ください。

これもC言語の基礎の問題なのですが、同じ名前の関数は1つしか存在できません。
※関数名のスコープ次第では例外あり。
なのでWinMainが2つ存在する時点でアウトです。

Re:ビルドできない。

Posted: 2010年8月29日(日) 13:49
by
すいません。今softyaさんの書き込みを読み直して気づきました。アウトですね。シエルさんの言っているサイトに行って出直します。

Re:ビルドできない。

Posted: 2010年8月29日(日) 13:52
by シエル
私が貼っているページだけ読んでも、WinMainの事がちょこっとかいてあるだけです。
ファイル分割についてはググって調べてください。

Re:ビルドできない。

Posted: 2010年8月29日(日) 14:07
by
あ、はい。今ググって来ました。で、ちょっと質問なんですけど、今typedef structって言うので、幾つかの変数をまとめてWinMainの外で宣言しています。これは分割した方ではexternを頭につけて宣言すれば良いのでしょうか。

Re:ビルドできない。

Posted: 2010年8月29日(日) 14:30
by
すいません上の質問無視してください。

Re:ビルドできない。

Posted: 2010年8月29日(日) 22:46
by たいちう
VCで複数のソースコードを開いて編集したいと言う事ですよね?
そしてそれぞれのソースコードにはWinMainがあると。

結論としては、1つのソリューションに複数のプロジェクトを追加し、
それぞれのプロジェクトが1つずつWinMainを含むようにすればよいです。

softyaさんの添付してくれたファイルで説明すると、
画面左のソリューションエクスプローラでは、
1つのソリューション'DxLib'を開いていますが、
ソリューション'DxLib'は1つのプロジェクト'DxLib'を持っています。
プロジェクト'DxLib'はソースコード'test.cpp'を持っていて、
ソースコード'test.cpp'が関数WinMainを持っています。

既に他の方が説明されているとおり、1つのプロジェクトには
1つのWinMainしか存在してはいけません。
2つのWinMainを含むファイルを同時に管理したい場合、
プロジェクトを追加してください。

ソリューションエクスプローラの『ソリューション'DxLib'』
と書いてある所で右クリックすると、プロジェクトの追加が選択できます。


別の方法として、プロジェクトとは関係ないファイルをVCで開くこともできます。
現在のエラーの内容から、ソリューションエクスプローラから2つのファイルが
見えていると思いますが、そこへの追加は本当に必要な方のみとして、
参考のために開くファイルは、メニューのファイル-開くから開きます。

さらに別の方法として、ソリューションエクスプローラでファイルを選び、
右クリックのプロパティで、そのファイルだけビルドしない設定にすることもできます。

用途に合わせて色々試してみて下さい。
VC以外のテキストエディタで開く、というのも、用途によっては正解の1つです。
さすがにメモ帳よりも良いエディタを使う人が殆どですが。

SLGを作成中ですが、DirectX周りがうまく動作しないです

Posted: 2010年9月08日(水) 00:13
by dic
現在SLGを製作中なのですが、マウスの位置情報の取得がどうも少しずれてて
うまくクリック処理ができないのです

下にできてるものをアゲておきます
メッセージボックスの嵐がでたらESC押しっぱなしで抜けてください
http://www1.axfc.net/uploader/Sc/so/151229

問題はというと2つあります
1つは、マウスの位置情報が少しずつ下にいくにつれてずれていくことです
2つめは、800x600の領域だと画面の更新(Flip)が行われるのですが、
1024x768だと、あまった部分の画面の更新がされないということです
DxDraw3を使ってるから、サポートしてないのかなぁとか思いつつも
調べる手段もなく困ってます

助言をいただけると助かります
画像

Re:SLGを作成中ですが、DirectX周りがうまく動作しないです

Posted: 2010年9月08日(水) 07:45
by dic
解決しました
1つめは、#define の座標指定の数字が微妙に間違ってました
2つめは、この画面での画面領域設定が一箇所だと思ってましたが、複数箇所にありました