PlatformSDKのヘッダファイルを優先にインクルードするには?

解決


TOM  2007-09-05 19:33:16  No: 66213  IP: [192.*.*.*]

.NET2003環境で、ソースファイルにwinsock2.hをインクルードしたところ
その先のヘッダファイルwinreg.hでインクルードしているreason.hが
PlatformSDKのヘッダファイルではなく、自分が作成したヘッダファイルを
参照してしまったのですが、PlatformSDKのヘッダを優先して参照するよう
にするにはどのようにしたら良いのでしょうか?

編集    削除
maru  2007-09-05 21:02:10  No: 66214  IP: [192.*.*.*]

自分が作成したヘッダファイルをローカルフォルダに置く。
winreg.hでは
#include <reason.h>
と"<"、">"でファイル名を括っているので、環境変数INCLUDEで設定された
フォルダを優先するハズです。
/* 環境変数が設定されていないってオチ? */

編集    削除
TOM  2007-09-05 22:23:58  No: 66215  IP: [192.*.*.*]

ヘッダファイルはローカルフォルダに置いています。
>と"<"、">"でファイル名を括っているので、環境変数INCLUDEで設定された
>フォルダを優先するハズです。
環境変数は、
Microsoft Visual Studio .NET 2003\SDK\v1.1\include
にパスが切られています。
正しいかどうかはわかりませんが、試しに
Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include
に設定してみましたが、状況は変わりませんでした。

編集    削除
へろり  2007-09-05 23:27:56  No: 66216  IP: [192.*.*.*]

一度中間ファイルを全て消して、リビルドしてみてはどうですか。
ごく希にそういう現象が起こったような気がします。

編集    削除
TOM  2007-09-06 00:34:46  No: 66217  IP: [192.*.*.*]

はい、リビルドも試してみましたが、変わりませんでした。

編集    削除
どら  2007-09-06 02:36:14  No: 66218  IP: [192.*.*.*]

VS2003のツール→オプションの、プロジェクト以下にある「VC++ディレクト
リ」の設定で、自作ヘッダのあるパスを登録していませんか?
登録していた場合、確か上から順番に参照していくはずなので、優先順位を変
更してあげればよいかと思います。

ただ、個人的には自作のヘッダは、元々あるものと重複しないように作った方
がよいと思いますけど・・・

的外れな回答でしたらごめんなさい。

編集    削除
TOM  2007-09-06 02:48:26  No: 66219  IP: [192.*.*.*]

ディレクトリ設定のインクルードのパスは以下のように設定されています。
$(VCInstallDir)include
$(VCInstallDir)atlmfc\include
$(VCInstallDir)PlatformSDK\include\prerelease
$(FrameworkSDKDir)include
$(VCInstallDir)PlatformSDK\include

これらのパスには自作したヘッダは入っていません。
プロジェクトのC/C++以下の追加のインクルードディレクトリのほうにパスを追加しています。

>ただ、個人的には自作のヘッダは、元々あるものと重複しないように作った方
>がよいと思いますけど・・・
>
>的外れな回答でしたらごめんなさい。
いえ、全くそんなことはないですよ。
私も全く同じことを思ってますので。
正直、ファイル名変えたいです・・・
ただ仕事ものですので、私の一存で決定できなくて。

編集    削除
επιστημη  URL  2007-09-06 20:55:32  No: 66220  IP: [192.*.*.*]

> ただ仕事ものですので、私の一存で決定できなくて。

だったらなおのこと、しかるべき決定権を持つ方にファイル名の変更を
"胸を張って"進言するのがスジかと。

もしくは適当なディレクトリを切って
#include <project/reason.h>
とするか。

編集    削除
TOM  2007-09-07 01:50:05  No: 66221  IP: [192.*.*.*]

>だったらなおのこと、しかるべき決定権を持つ方にファイル名の変更を
>"胸を張って"進言するのがスジかと。
その通りですね。
変更の承諾を頂きましたので、なんとか解決です。
ありがとうございました。

編集    削除
TOM  2007-09-07 01:50:34  No: 66222  IP: [192.*.*.*]

解決チェックし忘れました。

編集    削除
maru  2007-09-07 02:37:31  No: 66223  IP: [192.*.*.*]

> 変更の承諾を頂きましたので、なんとか解決です。
対症療法で対策しただけで、解決はしていないような気が...
問題がなくなったという点では、解決ですね。
/* 仕事の場合は対症療法に頼らざるをえない場合が多いのも事実だし。*/

出来れば、原因を究明していただけたらよかったのですが。

編集    削除
επιστημη  URL  2007-09-07 02:41:50  No: 66224  IP: [192.*.*.*]

> 対症療法で対策しただけで、解決はしていないような気が...

そっかな? 同名のヘッダが複数存在するのはなにかとトラブルの元なんだから、
むしろ抜本的な対策を講じたんじゃないかしら。

編集    削除
maru  2007-09-07 03:09:40  No: 66225  IP: [192.*.*.*]

> そっかな? 同名のヘッダが複数存在するのはなにかとトラブルの元なんだから、
それはそうなんだけど、動作が仕様と合っていないというのはいやです。
また、ヘッダファイルを作るときに名前の衝突を避ける為にライブラリの
ヘッダ名を全て把握しなければならないのもいや。もちろん自分の使って
いるヘッダは把握していますが、そのヘッダでインクルードしている末端
のヘッダまで把握しなさい、といわれると、ゴメンナサイといいたくなる。

「考えが甘い」と言われれば甘んじて受けます。

編集    削除
επιστημη  URL  2007-09-07 04:46:12  No: 66226  IP: [192.*.*.*]

> また、ヘッダファイルを作るときに名前の衝突を避ける為にライブラリの
> ヘッダ名を全て把握しなければならないのもいや。

それはごもっとも。
だから通常は直に 
#include <reason.h> せずに、ひとつディレクトリ切って
#include <somewhere/reason.h> するです。

編集    削除
maru  2007-09-07 06:54:10  No: 66227  IP: [192.*.*.*]

> だから通常は直に 
> #include <reason.h> せずに、ひとつディレクトリ切って
> #include <somewhere/reason.h> するです。
なるほど、了解いたしました。
でも、これはやっていないなあ。今後コーディング規約にいれるかな。

ところで、なぜ
#include "somewhere/reason.h"
ではないんですか?

編集    削除
επιστημη  URL  2007-09-07 07:21:25  No: 66228  IP: [192.*.*.*]

> ところで、なぜ
> #include "somewhere/reason.h"
> ではないんですか?

どっちでもかまわんでしょ。
あらかじめ定めたルールに従えば。

編集    削除
maru  2007-09-08 03:48:00  No: 66229  IP: [192.*.*.*]

> どっちでもかまわんでしょ。
> あらかじめ定めたルールに従えば。
そうですか。
何か特別の意味があるのかと思いました。

編集    削除