ATL/MFC in Windows Server 2003 SP1 Platform SDK may be DEPRECATED

菊池さんのとこより.

某氏に言われて見てきた 某掲示板の某スレ

未記入 氏が最も正しい事を言ってるけど、仕様変更があったらどうこうに素直に付き合ってるのが…

仕様変更がかかってダメになった物には素直に Obsolete を付けましょう。(.NETならね、JavaにはJ2SE5.0から@Deprecatedが追加されますね)

そして、出たワーニングにさっさと対処しましょう。

Obsoleteの無い言語なら(C++/Java)、メソッド名を変えてコンパイラに食わせましょう。直す場所なんてコンパイラが教えてくれます。

ダメになったものをズリズリと使い続けて延命策を講じるのが間違いです。

コメントにぐだぐだと書く代わりに属性使うのは時代の変化に見えますね.CodeDOM 形式でデータを格納するソース管理ツールがあったらかなり色々なことができそうですけど.
これを見てやっぱり書いておくことにしたのが ATL/MFC の話.
Visual C++ 2005 Express Edition 絡みで,「Windows Server 2003 SP1 Platform SDK に ATL/MFC が入っている」という話がちらほら紹介されてますが,Visual C++ 2005 の上位 Edition と同等の環境が構築できるわけでは無いことに注意してください.
まず,Platform SDK そのものについてはほとんど違いはありません.フルインストールした Windows Server 2003 SP1 Platform SDK と比較してみたところ,Visual C++ 2005 に付属する Platform SDKWindows Server 2003 SP1 Platform SDK から一部のファイルを抜いたもののようです*1
次に問題の ATL/MFC の違いについて.以下のように Windows Server 2003 SP1 Platform SDK に付属するものはだいぶバージョンが古いようです.

_MFC_VER _ATL_VER
Windows Server 2003 SP1 Platform SDK 0x0600 0x0300 *2
Visual C++ .NET 2003 0x0710 0x0710
Visual C++ 2005 0x0800 0x0800

ちなみに ATL/MFC 7.1 から 8.0 の変更点については以下参照のこと.
http://msdn2.microsoft.com/en-us/library/ms235433.aspx
_ATL_INSECURE_DEPRECATE 及び _AFX_INSECURE_DEPRECATE の追加と,Header Annotations (id:NyaRuRu:20050826#p2)への対応が大きいと思います.
最新版の存在や,最新版でどのような修正が行われたかを知らせずに,単に無償ダウンロードできるという理由で古いライブラリを奨めるのはちょいと再考して頂きたいですな.

*1:ただし文字エンコーディング絡みと思われる理由で Visual C++ 2005 に付属する mmreg.h は更新されている

*2:64bit対応時は 0x0301 になります.というわけで ATL 3.0 をベースにしたカスタム版かもしれません