技術ノート:Visual Studio
2005編
ExpressEditionと違い、インストール後に Windowsアプリケーションプログラムは そのままコンパイル・実行できるが、 「fopen」「sprintf」などC言語標準レベルの関数の使用について 「古い形式として宣言されました」という旨の警告が出る。
対処法としては「fopen_s」「sprintf_s」という、 セキュリティ関連が強化された 新しい関数に置き換えること。 ただ、中には引数が変化しているものもあるので 取り扱う場合には注意が必要。 (たとえば「sprintf_s」なら、 代入する変数のサイズを引数に取るようになった。 Visual
Studio .NET
2003では この関数はコンパイルエラーになる)
別件で、Unicode形式でないヘッダーファイルなどに関しても 警告が出ることがある。
以前のVisual
C++などでキャストが厳密になった警告と違い、 容易に修正できないので、 過去の資産としてプログラムを流用するときには注意。
DirectXのプログラムの場合はさらに深刻で 「libcp.libを開くことができません」 というエラーが頻出する。 「libcp.lib」はシングルスレッドにまつわるライブラリらしく、 今回のVS内に含まれていないようだが、 DirectXのヘッダーファイルか何かから参照しているらしく、 リンクエラーになってしまう。
SDKを最新版(「2005December」か「2006February」)にすると エラーはなくなるが、 例によって「d3dx9_29.dll」などの
DirectXランタイム以外のDLLが必須となる。
作品の配布を考えると、DirectXランタイム、.NET
Framework以外に もうひとつDLLが増えるのは負担なので 2004年のDirectX
SDKを使いたいところだが、 現状ではVisual
Studio2005を使う限り 新しいSDKを使う以外にない。
古いSDKが内部から参照している「libcp.lib」を なんらかの方法で無効にし、対応できる方法を模索中。
|