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

解決


TOM  2007-09-05 19:33:16  No: 66213

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


maru  2007-09-05 21:02:10  No: 66214

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


TOM  2007-09-05 22:23:58  No: 66215

ヘッダファイルはローカルフォルダに置いています。
>と"<"、">"でファイル名を括っているので、環境変数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

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


TOM  2007-09-06 00:34:46  No: 66217

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


どら  2007-09-06 02:36:14  No: 66218

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

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

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


TOM  2007-09-06 02:48:26  No: 66219

ディレクトリ設定のインクルードのパスは以下のように設定されています。
$(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

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

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

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


TOM  2007-09-07 01:50:05  No: 66221

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


TOM  2007-09-07 01:50:34  No: 66222

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


maru  2007-09-07 02:37:31  No: 66223

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

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


επιστημη  URL  2007-09-07 02:41:50  No: 66224

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

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


maru  2007-09-07 03:09:40  No: 66225

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

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


επιστημη  URL  2007-09-07 04:46:12  No: 66226

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

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


maru  2007-09-07 06:54:10  No: 66227

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

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


επιστημη  URL  2007-09-07 07:21:25  No: 66228

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

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


maru  2007-09-08 03:48:00  No: 66229

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加