とある、コードを、Visual Studio 2005で書いていたと思いねぃ。リソースのシンボル情報を使うために、メインのCPPのコードの先頭あたりに、
#include "resource.h"
と書いたわけですが(べらんめぇ調は出だしだけか?)、このresource.hは、Visual Studio 2005のリソースエディタが勝手に生成してくれていて、確かにそこにあるのです。
ところが、コンパイルすると、その、resource.hで定義されているシンボルが、ぜーんぶ「ない」と切って捨てられてしまい、先へ進めない状態が、一週間ほど続いていたので、ついつい、PC-8801FHと戯れたり、FF XIIに走ったりしていたわけですが、ふと、もうひとつ、Visual Studioが勝手に生成して、こっちは、Visual Studioによって、#includeされるようになっていた、StdAfx.hを覗いてみたら、末尾に「#includeしたいヘッダがあったらココに足せ。」みたいなコメントが付いているじゃありませんか oTL
Visual Studio 2005は、奥が深い……。
多分、もうひとつのやり方としては、resource.hをプリコンパイルヘッダに指定してやるってのがあるんじゃないかと思います。何となくそう思っただけで、それをしたら実際にワークするのかどうかは試していませんが、StdAfx.hは、プリコンパイルヘッダに指定してあったんですよ。後で気づいたのですが(^^;;
シェクまく
VC6の環境なので違うのかもしれませんが、
"resource.h"はアプリケーションクラスのヘッダにinclude宣言されており、通常のアプリケーションでは意識することなくリソースのシンボルを使えていました。
StdAfx.hはプリコンパイルヘッダなので"resource.h"のようにリソースいぢったら内容が変わるものをincludeするのには向いていないように思います。僕はwinsockとかafxほにゃららとかそういったヘッダを定義するようにしていました。
hiro
う〜ん、DLLだからかもしれません(^^;
DLLを作っているんですよ、ええ。
でも、なんにしても、どこでだって、#include って書いたら読んで欲しいんですが、そういうわけにはいかないものなんでしょうか oTL
あー、しーげん(笑)は奥が深いなぁ。カーニハンもリッチも、ストラウスとラップもびっくりだぁ (T_T)
d
プリコンパイル済みヘッダーを利用する場合、指定されたファイル(標準では「stdafx.h」)が出現するまでの記述は、”無視されます”。
なので、stdafx.hのincludeはファイルの先頭に置き、他のincludeはそれより後ろに置かないといけないわけですね。
ちなみにstdafx.hの中でincludeされたファイルはプリコンパイルされるため、良く変更するファイルやテンプレートを含んだファイルはstdafx.hの中でincludeしてはいけません。