少しここで質問してもいいのか不安ですが、助言お願いします。プログラミングについてはまったくの初心者です。(C言語見だして十日程度)
環境はXP, Microsoft Visual C++08, DirectX SDK(November 2008)です。
"0からのゲームプログラミング"と言うサイトに沿って勉強してるのですが、
上記サイト:http://www.plustarnet.com/aspil/Programming/
上記サイトコンテンツの、2D編の"スケルトンプログラム"の項目でスケルトンプログラムをダウンロードし、記事の通りに作成したのですが、次のようなエラーがでます。
c:\documents and settings\USER\my documents\visual studio 2008\projects\samplestg\skeleton\win32\header\stdafx.h(27) : warning C4005: 'UNICODE' : マクロが再定義されました。コマンド ラインの引数 : 'UNICODE' の前の定義を確認してください
c:\documents and settings\USER\my documents\visual studio 2008\projects\samplestg\skeleton\header\music.h(18) : fatal error C1083: include ファイルを開けません。'dmusici.h': No such file or directory
エラー 4、警告 4
ソースファイルにある4つの.cppそれぞれで出ます。
(1).定義云々と言われる方は(こちらは警告)
//#defineUNICODE// UNICODE を使用
#ifdefUNICODE
#define_UNICODE ←ここ
#endif
ここです。MSDNのヘルプを見ると、削除または#undefを使え、だったので、#ifdefと#defineの間に"#undef _UNICODE"を追加した所通りました。(削除でも通りました)
ただ、これでその後プログラムしていくのに変えて大丈夫でしょうか?
(2).includeエラーの方は、(こちらがエラー)
#include<dmusici.h>
となってるのですが、"dmusici.h"と言うのは"windows.h"などと一緒(ライブラリ?SDK?依存)の物でしょうか?
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include
C:\Program Files\Microsoft DirectX SDK (November 2008)\Include
とVC++08にセットアップ(?)してますが、どちらにも"dmusici.h"はありませんでした。これはこちらのSDKの問題でしょうか?
(1)は、一応解決済みで、警告はでないのですが、もし他にいい方法があれば教えてほしいです。
(2)は、自分的にはDirectX SDKあたりだと思うのですが、良く分かってません…
そもそも上記サイトでの解説が04年時の物で、"Visual C++ 6.0"と"DirectX 9.0 SDK Update (Summer 2003)"でのプログラムと解説なので、今のDirectX SDK (November 2008)で動作出来ない(このエラーが解決してもその後そぐわなくなる)ものなのでしょうか?そのあたりも教えていただきたいです。
かなり長文になってしまいました^^;。失礼しました。
No.2ベストアンサー
- 回答日時:
※お使いの環境はVC++6.0ではなくVC++08でしたね。
すいません勘違いしてました。
VC++2008ExpressEdition, DirectX SDK(August2007), DirectX SDK
(November2008)で同じコンパイルエラーが再現できたようなので
ちょっと調べてみました。
(3)について
コンパイラの仕様変更による問題のようです。
http://msdn.microsoft.com/ja-jp/library/y81x4ttb …
仕様ということなのでソースを修正する他無さそうです。
上記サイトの例のようにdllmain.h内を修正することになります(「=
ホニャララ」の部分を消す)。
(4)について
SkeletonDll::CFilePack::Beginメソッドの引数がLPCTSTR型なのに対し
て、コール側が普通の文字列リテラルを与えている為に出ているエラー
のようです。
(Microsoft SDKsフォルダ内のヘッダファイルを見たところ)LPCTSTR型
はワイド文字定数のポインタ型でした。
要するにメソッド側がワイドなのに対してコール側がワイドでないとこ
ろが問題なので、コール側をワイド文字列に修正する必要があります。
具体的にはBegin("mojiretsu");のようになっている箇所で、
Begin(L"mojiretsu");のように先頭にLをつければ良いです。
この回答への補足
返事遅くなりました。すみません。
大変分かりやすい回答ありがとうございます。おかげで(3),(4)とエラーは解決しました。
でもまた、別のエラーが出てきました…
リンカエラーだったんですが、どうやらVC++08自体?でダメなようで、まずエラーが
(メイン.cpp名).obj : error LNK2019: 未解決の外部シンボル~が関数~で参照されました。
MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル~が関数~で参照されました。
これが数十種類。~が関数~と略してる~の部分が重要なんでしょうが、多すぎて一例にどれを取ればいいやら…
最後に
C:(略)\SampleSTG.exe : fatal error LNK1120: 外部参照 45 が未解決です。
で、VC++08でWindowsアプリケーション(46)の新規作成での初期コードのビルドでもMSVCRTD.libと(メイン.cpp名).objの、リンカエラーが出されます。コンソールアプリケーション(26)やCLRコンソールアプリケーション(15)でもMSVCRTD.libのエラー同様でした。(アプリの()内の数字は最後に出てくる外部参照~が未解決、での数字です。なんとなく)
プロジェクトのプロパティのリンカあたりもいじってみましたがダメでした。
printfでHello Worldすら出来ない状態に…
正直面食らってよく頭が…VC++08の問題なら、元の質問から離れそうっぽいのですね…
No.4
- 回答日時:
ほとんど情報量 0 ですが:
とりあえず, 「メイン」の方で出ているエラーは挙げてもらえると「多少は何とかなる」かもしれません. 一方, MSVCRTD.lib で出ているエラーは「何かライブラリをリンクし忘れている」のかもしれません.
とにかくそのサイトの情報は古いので, 最近の環境を使うほどエラーになりやすいとは思います.
この回答への補足
すみません。補足投稿前に更新見忘れてました。反省…
1個前の補足通りです。
実際は、"すべての設定のリセット"でリセットしたら直りました。ライブラリに、あるlibファイルを入れるとエラーが再現されるので、それが原因のようでした。(素人の目ですが)
(メイン.cpp名).objのエラーもリセットで直りました。リセットによってlibとは関係なく他の事で解決されたのかも知れませんが。
>そのサイトの情報は古いので, 最近の環境を使うほどエラーになりやすいとは思います
そうなってしまうものなのですね…手厳しいものです。
1個前の補足通りです。今回は諦めます。ありがとうございました。
No.3
- 回答日時:
開発環境に依存した問題は大概厄介です^^;
もし自分なら(3)が出て来たあたりで見切りを付けてると思います。
解決に至ることができず恐縮千万です。
この回答への補足
いえ、ご助言分かりやすくて有り難いです。
今回自分の力及ばずで、何度も質問してしまって…
結果的に.libのエラーはディレクトリを表示するプロジェクトのライブラリファイルに色々詰め込みすぎたみたいでした。数個外すと無事通りました。
スケルトンプログラムは、おかげでビルドは通ったのですが、デバッグ時に別のエラーが出てきました…
>開発環境に依存した問題は大概厄介です^^;
>もし自分なら(3)が出て来たあたりで見切りを付けてると思います。
いやまったくです。今回は諦めて、またDirectX SDKの勉強は新しい記事、書籍でアプローチしてみようと思います。(そういう問題なのか自分でもちょっと疑問ですが)
kettachinさん今回はありがとうございました。
No.1
- 回答日時:
(1)について
C言語ではマクロは#define以外にコンパイル時のオプションで
定義することも可能です。
Visual C++ 6.0を持っていないのでこちらで確認が取れず申し訳
無いのですが、下記のURLを参考にコンパイルオプションに
/D UNICODE が定義されていないか調べてみてはいかがでしょうか。
http://www.ne.jp/asahi/hishidama/home/tech/vcpp/ …マクロ定義
また、UNICODEと_UNICODEでは意味合いが多少異なるようです。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng. …
憶測ですがスケルトンプログラムに_Tマクロが使用されている場合、
動作が変わるかもしれません。
(2)について
お察しの通りSDKの問題のようです。
http://cgi32.plala.or.jp/higpen/book/shtPro/qa.s …
以上ご参考になれば幸いです。
この回答への補足
お早い回答ありがとうございました。
色々といじった結果、逆に悪化させてしまったようで…
(2)は、まずURL大変参考になりました。最新のverでは無いのですね。
プログラムの変更は到底無理なので、とりあえずDirectX SDK August 2007にver落としてみようと、
November 2008をアンインストールし(これがまずかった?)August 2007をインストールしてビルドした所dmusici.hの問題は解決しました。が、別のエラーが出るようになりました。
(3)error C2383: 既定の引数をこのシンボルで使用できません。
と
(4)error C2664: 'SkeletonDll::CFilePack::Begin' : 1 番目の引数を 'const char [15]' から 'LPCTSTR' に変換できません。(新しい機能 ; ヘルプを参照)指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
どちらもどういうエラーなのか大体は分かるのですが、なぜこのようなエラーが出てきたのかよく分かりません。
SDKの方をいじってるので、SDKの問題なのかとは思うのですが、自分の解読力がないので…
一応現在August 2007とNovember 2008の両方入ってます。(08を消して07を入れ再度08を入れた)
(3)の方はファイル名はDllMain.hで、処理内容はDLL作成みたいで、関数の型定義がズラッと並んでいます。その中のエラーです。
(4)の方はサッパリです。
(1)はUNICODEは作者固有の物だと勝手に思ってましたが、規定の文字のデータ型(?)だったんですね。調べてみると結構議論されててややこしいですね…。多少理解できましたが扱うのは無理そうなので、#undefで様子見としました。上記のエラーも出てきたので…
(1),(2)は(一時?)解決しました。ありがとうございます。
(3),(4)はどのように解決すればいいのか分かりません。助言お願いしたいです。
長文、駄文失礼しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
適切な変換関数が存在しない???
-
fortranでプログラムを実行する...
-
Excelのエラーで困ってます。
-
バッチからsqlplusの接続エラー...
-
visual C++ でビルドの中止がで...
-
HEWを使用しているのですが、こ...
-
コンパイルできません。
-
ユーザフォーム開くとエラーになる
-
Handlesについて
-
error C2143: 構文エラー の対処法
-
【エクセル】CDOでメール送信が...
-
Visual Studioのstrcpy_sについて
-
デバッグ中のエラーのことで教...
-
左側がクラス、構造体、共用体...
-
フォームの作成中にエラーが発...
-
SQLServerについて
-
C# 固定長ファイルの取得 FileGet
-
C#で教えてください
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
Excelのエラーで困ってます。
-
fortranでプログラムを実行する...
-
適切な変換関数が存在しない???
-
HEWを使用しているのですが、こ...
-
コンパイルできません。
-
バッチからsqlplusの接続エラー...
-
デバッグ中のエラーのことで教...
-
visual C++ でビルドの中止がで...
-
VB2008で定数に色の設定をした...
-
ビルド失敗 指定されたファイ...
-
Handlesについて
-
RightとLeft関数のライブ...
-
エラー 'iostream.h' : No su...
-
sys/time.hのインクルードがで...
-
DLL関数を使ったプログラム
-
Visual Studioのstrcpy_sについて
-
レコードセットをcloseする所で...
-
LPCWSTRとchar
おすすめ情報