最近やっとVC++ Express 2008を触りました。

ですので、以前のサンプルではVC++を通していません。。


とりあえずコンパイルを通すための注意事項をメモをしておこうと思います。



①プロジェクトの種類

 プロジェクトの作成時に、種類を「Win32」、テンプレートを「Win32コンソール アプリケーション」を

 選びましょう。


②インクリメンタルリンク

 プロジェクトのプロパティの「リンカ」のインクリメンタルリンクは「行わない」にしましょう。

 これは何かというと、使用するにすると編集を掛けたところのみをコンパイルをかけるためにコンパイル時間が

 短くなると言う利点があるようです。

 ただ実行時に、

 「MSVCR90D.dllが見つからないため、このアプリケーションを開始できませんでした。」

 というエラーが発生します。

 

 これがVC++のバグなのかどうかは分かりませんが、「行わない」にすれば発生しません。


③warning C4996: の回避

 この警告が出ると言うことは、「localtime」などのVC++で使って欲しくない関数を使用したということです。

 えっ!?C言語の標準関数なのに?って思ったのですが、VC++くんは勝手に廃止勧告宣言したようです。

 「localtime_s」などのセキュアな関数を変わりに用意しているのでそれを使用して欲しいようです。

 

 でも、このサンプルは遊びなので、わざわざ警告の出た関数すべてを書き直すのもねぇ・・・。

 ですので「気にしない」ことにしましょう! 

 もしくは、C++の警告レベルを2に設定すると警告が消えます。


 しかし、警告は無視しない方が良いので、将来的にもVC++を使用するなら関数を書き換えた方が

 いいかもしれません。


④プリコンパイル済みヘッダ

 プリコンパイル済みヘッダは「使用しない」にしましょう。

 もしくは、サンプルのコードに "stdafx.h" をインクルードしましょう。


⑤2バイト文字を含むパスのファイルオープン

 どうもVC++2008では、そのままでは日本語を含むパスをオープンできないようです。

 WindowsではファイルのパスはSjisで保存されているはずです。

 ですので、ifsream("ファイル名")でファイル名をSjisで指定すれば問題なく開けるはずです。

 が、ファイルを見つけてくれません。

 おそらく内部でUNICODEの何らかの処理を勝手にしてしまうのでは?と思っていますが原因は分かりません。

 これを解決するには、main()内部の一番最初で以下のコードを入れます。


  std::locale::global(std::locale("japanese"));


 これは、扱う文字列を日本語として対応させるものです。

 ただ、コンパイラにjapaneseが対応していない場合エラーになるので、ここのサンプルでは

 使用しません。

 基本的にサンプルにファイルを開くコードが入っている場合、日本語を含まないパスにファイルを置いて

 遊んでみてくださいね。