今VC++6 SDKを勉強中の者です。
『猫でも・・』の311章に出てくる『プラットフォームSDKを更新する必要』
を次のようにやっても全然変化(コンパイル時にエラーが出てくる)しません。
何がおかしいのでしょうか。バージョンアップの分かる方教えてください。
・やった方法
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/から
Windows XP SP2 SDKをダウンロードしてインストール
http://www.microsoft.com/japan/msdn/vstudio/downloads/sp/VS6SP6.aspから
Visual Studio 6.0 Service Pack 6をダウンロードしてインストール
・環境
WinXP(SP2),VC++6(生のまま),IE6
・エラーメッセージ
I_IMAGENONE、BTNS_BUTTON 、BTNS_AUTOSIZEが定義されていません・・・
といったものが出ます。
多分、バージョンアップされたヘッダーファイル(.LIBもそうでしょうが)
インストールされていないためと思っております。
インストールの仕方がおかしいのか、間違ったファイル(Windows XP SP2 SDK)
をインストールしているかだと思うんですが・・・・
(core SDKも試しましたが、同じ結果でした)
去年のこのラウンジにも同じ内容の書き込みがあり、自己解決されてましたが、
WindowsのHPが更新されたのか、パソコンのセットアップの違いか分かりませんが
その方とはちがった状況(インストールはできるところ)です。
よろしくお願いします。
目的の名前をヘッダの中で探して見ると、多分、
#if (_WIN32_IE >= 0x0501)
#define I_IMAGENONE (-2)
#endif
のようになっていると思います。
これに従って、定数を定義してください。
たとえば、この場合 _WIN32_IE を 0x0501 以上の値に定義します。
dairygoodsさん、早急なアドバイスありがとうございます。
ということは、やり方は間違っていなかったということですね。
早速やってみます。
dairygoodsさん、ありがとうございました。
以下のようにしました。
・Microsoft Platform SDK for Windows XP SP2で
『インストール』された<commctrl.h>の冒頭にある定義で
#define _WIN32_IE 0x0501 → #define _WIN32_IE 0x0502
に修正。
・「ツール」→「オプション」→「ディレクトリ」にて
[表示するディレクトリ]ごとに、インストールされた関連ディレクトリを
登録して、最優先に設定。
とすると、エラー無しにコンパイル+リンクしました。
(当然、実行も可能でした。)
しかし、わけあってVCを離れていたため、ここのHPは3年ぶりくらいに
来たのですが、昔っから皆さんに親切に教えていただいてとっても感謝してます。
ありがとうございました。
> 『インストール』された<commctrl.h>の冒頭にある定義で
> #define _WIN32_IE 0x0501 → #define _WIN32_IE 0x0502
この手順はまずいです。元に戻すべきです。
# ファイルのタイムスタンプまで元に戻さないとまずい (.pdb と不一致になる) ので、
# SDK を再インストールすべきでしょう。
Microsoft の提供しているファイルを修正するのではなく
プロジェクトの設定→C/C++→プリプロセッサの定義のところに _WIN32_IE=0x0502 を追加。
としましょう。
そのための #ifndef _WIN32_IE なので。
tetrapodさんありがとうございます。
>プロジェクトの設定→C/C++→プリプロセッサの定義のところに _WIN32_IE=0x0502 を
追加。
>としましょう。
・・・・ってことは、
プロジェクトごとに設定しないといけないわけですか?
バージョンアップ(と思っている)だから、なにか一発で設定できて『おしまい!』
というのは無いのでしょうか?
ついでで申し訳ありませんが、LIBの設定も私はプロジェクトごとに
『設定』にて行っておりますが、何か共通して『一発設定』があるような気が
していますが、ご存知なら教えてください。
なにはともあれ、危険な方法を注意していただいてありがとうございました。
【一発設定】できてしまうということはつまり、例えば常に WINVER=0x0500 にするとか
_WIN32_IE=0x0502 にしてしまう、ということになってしまいます。
すると WinNT や IE3.x しかインストールされていないマシンでは動作しないソフトしか作れ
ない
開発環境になってしまうということです。Microsoft としてはそれではまずいでしょう。
プロジェクトの「プリプロセッサ定義」に WINVER=0x0500 を追加するということは
「このプロジェクトは WinNT で動作しなくていい (その代わり新機能を使うぜ!) 」
というプログラマの意思表明なので、一発設定は無いと思います。
> バージョンアップ(と思っている)だから、なにか一発で設定できて『おしまい!』
> というのは無いのでしょうか?
過去のしがらみを引きずっている点で、単純な上位互換のバージョンアップというより
トレードオフの選択肢が増えた、という感じかと思います。
それぞれのバージョン用のマクロ定義を付加したヘッダとかを作っておいて、
(例えば、windows500.h とか?)、その中の先頭で WINVER=0x0500 とかにしておき、
コードを書くときには windows.h のかわりに常にそちらを使うとかではだめでしょうか
。
# プロジェクトの作成時のみのおまじないですし、そんなに手間ではないと思うですが。
>プロジェクトの「プリプロセッサ定義」に WINVER=0x0500 を追加するということは
>「このプロジェクトは WinNT で動作しなくていい (その代わり新機能を使うぜ!) 」
>トレードオフの選択肢が増えた、という感じかと思います。
なるほど、みなさんの考え方のほうがすんなりとVCを受け入れられるかも
分かりませんね。
(VCの場合、同じ結果を出すにも複数の選択肢があって、どれを使うかは
その人の判断になりますからね。)
貴重なご意見ありがとうございました。
久しぶりにVCに帰ってきて(しかもSDKは初めてで勉強中)のため
また分からないことが出てくると思います。
どうしても分からない場合はまた教えて戴きたいのでよろしくお願い致します。