none
IDC_EDIT1 が未定義になる現象への対処法 RRS feed

  • 質問

  • VC++ 2010で

    Edit_GetText(GetDlgItem(hDlg, IDC_EDIT1), szRC, sizeof(szRC));

    を含んだソースでIDC_EDIT1が未定義になってしまいます。因みに上記はWindowsx.hで定義されているMacroのようです。

    空のプロジェクトから作成したプロジェクトなので何かの参照ができていないか、Includeファイルが足りないなどの問題だとおもうのですが、原因がつかめません。

    対処法をご教示頂ければ幸いです。

    よろしくお願い申します。


    2011年8月31日 12:31

回答

  • IDC_EDIT1はWindowsが用意しているヘッダーファイルの中で宣言されているMacroで使っている識別子なので

    えーと、細かい突っ込みで恐縮ですが

     

    (1)

    WindowsX.hは、VisualStudio2010(またはWindows SDK)が提供しているヘッダであって、Windowsが提供しているわけではありません。

     

    (2)

    WindowsX.hは、例えば私の環境(Windows7 64bit + VisualStudio 2010 Professional)では

    C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include

    の中にあります。

    そのファイルを直接テキストエディタなどで開いても「IDC_EDIT1」という文字列はありません。

    というかどんな環境であってもWindowsX.h内にIDC_EDIT1という記述が現れることはその性質上ありえないと思います。

     

    つまり、IDC_EDIT1というシンボルは、(マイクロソフトが提供しているのではなくて)karankoronさんがご自身の操作で作ったものです。

    ご質問なさっているのですから意図して作ったものではないと思うのですが。

     

    察するにダイアログリソースの取り扱いやその周辺の技術についてご存じないと思いますので、そこをまず学習されるとよいかと思います。

    そうすれば、resource.hが自分で直接シンボルを追加したりするような性質のものではないことがわかるはずです。

    (仕組みをよくわかっていれば、直接編集したりすることはありますが、それは別の話)




    • 回答としてマーク karankoron 2011年9月1日 3:20
    2011年9月1日 2:59

すべての返信

  • 単に resource.h をインクルードしていないだけでは?

    IDC_EDIT1 といった識別子はリソースエディタで命名した際に、resource.h に #define で定義されます。
    従って、IDC_EDIT1 などの識別子を使うためには resource.h をインクルードしている必要があります。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年8月31日 15:07
    モデレータ
  • Azulean 様

    ご回答ありがとうございます。

    resource.hはIncludeしていますが確かにその中では定義しておりません。IDC_EDIT1はWindowsが用意しているヘッダーファイルの中で宣言されているMacroで使っている識別子なのでIDC_EDIT1もWindowsがどこかで定義しているのではないかと思い質問致しました。

    resource.hで適当な数値を割り当てればよいものなのでしょうか。

     

    2011年9月1日 2:01
  • IDC_EDIT1を検索すれば定義されているファイルがわかると思います。
    IDC_EDIT1はリソースエディタが自動で定義する場合がある名称なので、
    すでに無効になっている可能性もあります。
    出てこない場合は、その行が「対象としているコントロールのID」を調べてIDC_EDIT1の
    かわりに使います。

    よろくですが、WindowsX.hとMFCの相性がよくない部分があり、
    SubclassWindow()がMFCのメンバと衝突したことがあります、アナウンスもされてます。
    http://support.microsoft.com/kb/150076/ja
    結果、一部で使用を取りやめたりしました(vv;)。注意して使いましょう。



    2011年9月1日 2:06
  • IDC_EDIT1はWindowsが用意しているヘッダーファイルの中で宣言されているMacroで使っている識別子なので

    えーと、細かい突っ込みで恐縮ですが

     

    (1)

    WindowsX.hは、VisualStudio2010(またはWindows SDK)が提供しているヘッダであって、Windowsが提供しているわけではありません。

     

    (2)

    WindowsX.hは、例えば私の環境(Windows7 64bit + VisualStudio 2010 Professional)では

    C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include

    の中にあります。

    そのファイルを直接テキストエディタなどで開いても「IDC_EDIT1」という文字列はありません。

    というかどんな環境であってもWindowsX.h内にIDC_EDIT1という記述が現れることはその性質上ありえないと思います。

     

    つまり、IDC_EDIT1というシンボルは、(マイクロソフトが提供しているのではなくて)karankoronさんがご自身の操作で作ったものです。

    ご質問なさっているのですから意図して作ったものではないと思うのですが。

     

    察するにダイアログリソースの取り扱いやその周辺の技術についてご存じないと思いますので、そこをまず学習されるとよいかと思います。

    そうすれば、resource.hが自分で直接シンボルを追加したりするような性質のものではないことがわかるはずです。

    (仕組みをよくわかっていれば、直接編集したりすることはありますが、それは別の話)




    • 回答としてマーク karankoron 2011年9月1日 3:20
    2011年9月1日 2:59
  •  cbr600rr 様

    システム側というイメージでWindowsとVS2010を混同しておりました。失礼致しました。

    〉察するにダイアログリソースの取り扱いやその周辺の技術についてご存じないと思いますので、そこをまず学習されるとよいかと思います。

    ご指摘の通りなので、ダイアログに関する学習から始めたいと思います。

    ありがとうございます。

    今後ともよろしくお願い申します。

    2011年9月1日 4:12
  • 仲澤 様

    ありがとうございます。

    IDC_EDIT1はVS2010でダイアログを然るべく作成すると自動的に作成される類の識別子のようですね。

    今回私は、とあるサンプルプログラムを実行してみようとしており、RCファイルやresource.hはファイルに直接書き込んで使おうとしておりましたので、未定義になっているようです。

    現状では、resource.hの中に適当な定義をして未定義で蹴られることはなくなりました。

    とりあえずこの問題はCloseして先に進みたいと思います。

    ご回答頂いた皆様、ありがとうございました。

    今後ともよろしくお願い申します。

    2011年9月1日 4:45
  • 今回私は、とあるサンプルプログラムを実行してみようとしており、RCファイルやresource.hはファイルに直接書き込んで使おうとしておりましたので、未定義になっているようです。

    resource.h に直接書き込んだ際に、単に IDC_EDIT1 を書き忘れただけか、別のサンプル・説明と混ぜてしまったのでは?
    IDC_EDIT1 を使うサンプルでその rc ファイルや resource.h を丸ごと書き写したのであれば、その際に IDC_EDIT1 も一緒に書き写されるでしょうから。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年9月1日 14:29
    モデレータ