C++でリソースファイルのコンパイルができない問題について

このQ&Aのポイント
  • C++でプログラミングを行っているが、リソースファイルがコンパイルできない問題が発生している。
  • 以前に質問したが解決せず、再度同様の問題をこちらで質問する。
  • 文法エラーではないため、他のソースも試したが同様にエラーが発生している。
回答を見る
  • ベストアンサー

C++でプログラミングを行っているのですが、リソースファイルがコンパイ

C++でプログラミングを行っているのですが、リソースファイルがコンパイルできません。 以前にyahoo知恵袋でも質問したのですが、解決しなかったのでこちらで再度同様の質問いたします。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1243426602 文法エラーではないはずです。 http://www.kumei.ne.jp/c_lang/sdk/sdk_06.htm (猫でもわかるプログラミング) ここのソースをまるっとコピーしてもエラーとなります。 他のサイトのソースで試してみてもだめでした。 何か問題があるのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
noname#144013
noname#144013
回答No.3

こんにちは。 結論から言いますと、リソースファイル(menu.rc)内のenum型宣言に問題がある ようです。 注)「yahoo知恵袋」さん側で、ご提示されたリソースファイル(menu.rc)をそのまま   使用されていると仮定した話しになりますが。。。 リソースファイル(menu.rc)内の下記部分、 > enum IDM { IDM_OPEN , IDM_END }; これは、"IDM_OPEN" 及び "IDM_END" を enum型の値として宣言されているよう ですが、おそらく、リソースコンパイラ(brc32.exe)では、enum型宣言とは認識され ず、リソース定義として認識され、結果として構文エラーになっていると思われます。 対策としては、 "IDM_OPEN"、"IDM_END" などのリソースIDの定義は、リソースファイル(*.rc)内で 行うのではなく、専用のヘッダ-ファイル(resource.h など)を別に用意して、その ファイル内で、  #define IDM_OPEN 100  #define IDM_END  101 のようなdefine定義を行い、このヘッダ-ファイルをリソースファイル及び、プログラム 本体のソースファイルにインクルードすれば良いと思います。 以下は、リソースファイルを書き直した例です。 ========================= #include <windows.h> #include "resource.h"  //←このファイルに上記のdefine定義を書いておく //---------------------------------- // メニュー //---------------------------------- MENUBAR MENU PRELOAD FIXED {   MENUITEM "開く(&O)" IDM_OPEN   MENUITEM "終了(&X)" IDM_END } ========================= 以上です。

shotacom
質問者

お礼

ありがとうございます。おかげさまで上手くいきました。 ソースをそのままコピーして実行していたのですが、ヘッダファイルを作るのが面倒だったのでヘッダファイルの内容をそのままリソースファイルに貼り付けていたのが原因だったのですね。

その他の回答 (2)

回答No.2

Borland ユーザーではないので正確ではありませんが。 q1243426602は IDM_OPEN , IDM_ENDを定義していないという文法エラーではないでしょうか? (ここからあてずっぽうですが) sdk_06.htmで同じパターンだと sample02.hがないとか正しくインクルードしていないとか。 Borlandがなく検証できないので最後までフォローできませんが、 "まるっとコピー"が不正確なこともありえるので、 ソースとエラーの内容を張っていただいて他の識者の御意見を 仰いだほうがよろしいかと思います。 がんばってください

shotacom
質問者

補足

>>IDM_OPEN , IDM_ENDを定義していないという文法エラーではないでしょうか? はい、その通りでした。 FarEyesさんの仰ったように、ヘッダファイルとして取り込んでいなかったのが原因だったようです。 回答して頂きどうもありがとうございました。

noname#245936
noname#245936
回答No.1

うーん。 C言語さほど触ってないので、分からないのですが。 きっと、ヘッダーファイル参照がうまく行ってないので、 「指示された関数が意味わけわからん」と怒られている状況 には間違いないかと思います。 Boland知りませんが。 多分、Include の中はWindows.rcじゃないですか? WindowsのUIを関数名で表示しようというメソッドが構文 エラーなので間違いなく、ライブラリの参照ができてないか、 Bolandの関数名が違うかどちらかです。 …しかし、古い環境使ってますなぁ。 レトロ趣味ならいいでしょうが。 今は、とりあえず動かす+ゲイツOS固定なら.NETの無料の奴。 流行、飯のタネならWeb系のなにか(PHP/JAVA)。 AppleならObjectCでしたっけ? ポインタを果敢に攻めて、WinDLLをキックしてチマチマUI作る 手間が惜しいような気がしますが…

shotacom
質問者

お礼

回答して頂きありがとうございました。 PCスペックが低いので、VC++とか使いたくても処理が重くてイライラするのでbccを使っています。 あと個人的な趣味の学習でプログラミングをしているのでというのも理由ですね。

関連するQ&A

  • 『14歳から始めるc言語わくわくゲームプログラミング』の116ページができません><

    14歳から始めるc言語わくわくゲームプログラミングという本でプログラミングについて学んでいるのですが、116ページのソースがうまく実行できません。 ちなみに、書いてあることを忠実に行っているはずなんですが・・・ ※自分と同じように、この116ページでエラーが出ている方は他にも何人かいらっしゃるようです。 エラー内容も同じです。 もしかして本の誤植でしょうか・・・ http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1323854768 **************************** エラー内容(ユーザー名は伏せています) myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました。 C:\Documents and Settings\ユーザー名\My Documents\Visual Studio 2008\Projects\chap4\Debug\chap4.exe : fatal error LNK1120: 外部参照 1 が未解決です。 **************************** もし、同じくこの本を読んでいる方などで分かる方はお願いします>< (そう出ない方でも、分かる方はお願いします!) ※この本は度々、誤植があると他のサイトで聞きました^^;

  • C言語について。

    C言語プログラマとしては、スタートアップコードは・・・ ・自分が書いたプログラムを、直接動かすために必要なライブラリ ・それはコンパイル後、リンカによって追加されるライブラリこれは、 どういう意味でしょうか?分かりやすく教えていただけると幸いです。すみません。で、 以下のかぶくんまんさんの回答です。 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11247611941 で、 C言語におけるプログラミングとは「main関数を書くこと」に他ならない。なぜ「main関数を書く」ことがC言語におけるプログラミングに他ならないのかと言えば、それは偏に「C言語のコンパイラはmain関数を呼び出すプログラムを生成するから」です。それがmain関数を求めるので結果的にmain関数がリンクされ、そしてmain関数が求めるままに他の関数もリンクされていくわけです。 で、その「main関数を呼び出すプログラム」こそが、C言語における「スタートアップコード」。 という回答で、main関数以降は、プログラマが書くのですよね?プログラマが関数をリンクさせる様なプログラムを書くということでしょうか?教えていただけると幸いです。すみません。 という所が分かりません。教えていただけると幸いです。すみません。以下のURL https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12247932542

  • 海外旅行の質問に対する、嫌がらせ

    このサイトで、以下のような質問をした場合に嫌がらせはありますか?。 別のサイトの質問ですが、 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1487977674 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1387974503 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1187973456 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1487970979 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1487969879

  • MDIのメモ帳もどきにセーブ・ロード機能をつけるには

    猫でもわかるプログラミング WINSDK編 83章~85章のMDIのメモ帳もどきにセーブ・ロード機能を 付けるには、どうすればいいんですか? http://www.kumei.ne.jp/c_lang/sdk/sdk_83.htm http://www.kumei.ne.jp/c_lang/sdk/sdk_84.htm http://www.kumei.ne.jp/c_lang/sdk/sdk_85.htm MDIのドキュメントウィンドウのウィンドウハンドルを取得したら、 (これは前回質問して分かりました。hChildがハンドルですね?) その子ウィンドウであるエディットボックスのウィンドウハンドルを 取得したいんですが、どうすればいいですか? 要するに、「猫でもわかるWindowsプログラミング第2版」の int MyOpen(HWND hEdit);int MySaveAs(HWND hEdit);に手を加えるだけで テキストファイルを操作したいんです。

  • MDI(自作メモ帳)の子ウィンドウのHWND取得について

    はじめまして、TKOZという者です。 c言語とWINAPIでMDIの自作メモ帳を作っています。 ところで、MDIを使って、複数のドキュメントウィンドウでテキストファイル を保存したいのですが、選択されたドキュメントウィンドウの保存をする 際にそのドキュメントウィンドウのHWND取得をしたいのですが、 どうすればいいでしょうか? ソースコードはこれです。 http://www.kumei.ne.jp/c_lang/sdk/sdk_83.htm http://www.kumei.ne.jp/c_lang/sdk/sdk_84.htm http://www.kumei.ne.jp/c_lang/sdk/sdk_85.htm

  • リソースの多国語化で

    現在、顧客の関係でVisualStudio2003でC++のプログラミングをしております。 その中で、中国語やドイツ語などのリソースの追加依頼があり、 その言語の文字列をもらっています。 そこで、リソースファイルをEmeditorなどのエディターで直接開き、編集して保存すると、他の言語の部分でコンパイルエラーが起こってしまいます。 開くときのエンコードは、中国語であれば、GB2312で開き、編集後保存する際には、同じエンコードで保存したり、SJISで保存をしたり試しました。が、やはり、同じようにコンパイルエラーになってしまいます。 そもそもこのような方法はとれませんでしょうか?もしくは、他に何か方法があれば、お教え願えれば助かります。 よろしくお願いいたします。

  • 猫でもわかるプログラミング74章について

    http://www.kumei.ne.jp/c_lang/sdk/sdk_74.htm にあるプログラムなのですが ビルドすると、"OPENFILENAME: 定義されていない識別子です。" と出力されます。 何が原因なのでしょうか・・。 開発ソフトはVS2005 proを使っています。

  • ファイルを消せません

    http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1212857637 のサイトを見て、 C:\ProgramData\Microsoft\Search\Data\Applications\Windows C:\ProgramData\Microsoft\Search\Data\Temp の二つのファイルを消そうとしているのですが、 なぜか消せません 消去方法をどなたか教えてください

  • プログラミング方法

    先日javaのプログラミングをはじめました。 本を読みながらやっているのですが、コンパイルの段階でエラーがでてしまいます。自分がやった手順で何か間違っているところがあったら おしえてください。 1.CドライブにYJSampleという名前のディレクトリをつくる そのなかに01というディレクトリをつくる 2.環境変数のPATHの項を変数。SDKを保存した場所\binを入力 3.ソースファイルを作成。ここで作成したファイルの名前を Sample1.javaで登録したのですがメモ帳で開いてみるとSample1としか指示されません。 4.コマンド プロンプト起動。cd c:\YJSample1.java を入力して実行をしたのですが エラー:Sample1.javaを読み込めません エラー一個とでてしまいます。 エラーが出ないようにするにはどうすればいいのでしょうか? 環境変数が設定できてないとおもったのですが、SDKを保存した場所\binを入力すればいいんですよね?

    • ベストアンサー
    • Java
  • C言語のコンパイルができません

    http://www.c-lang.org/primer.html 上記サイトのC入門用プログラム「hello.c」と言うソースのコンパイルを試みたのですが、エラーが出てしまいコンパイルできません。OSはwindows7でコンパイラはMinGWです。

専門家に質問してみよう