VS2002 で作成されたC++プロジェクト（with ATL）を VS2013 でビルド

# 目的

* Visual Studio 2002 で作成されたC++プロジェクト（with ATL）を Visual Studio 2013 でビルドできるようにする

# 前提

* プロジェクトを作成した Visual Studio のバージョンは以下のとおり
 * Microsoft Development Environment 2002  Version 7.0.9955
 * セットアップされている製品: Microsoft Visual C++ .NET
* [2008で削除されたATL](http://msdn.microsoft.com/ja-jp/library/cc714309(v=vs.90).aspx) を多用している
* ソースはなるべく変えない
* ワタシ C++ ワカラナイネ～

# 手順

1. Visual Studio 2013　でプロジェクトを開くと、自動で変換が発生する
2. そのままビルドしようとすると、以下のエラーが発生
```
error MSB8031: Building an MFC project for a non-Unicode character set is deprecated. You must change the project property to Unicode or download an additional library. See http://go.microsoft.com/fwlink/p/?LinkId=286820 for more information.
```
3. [マルチバイト MFC ライブラリ](http://www.microsoft.com/ja-jp/download/details.aspx?id=40770) をインストール
4. 再度ビルドしようとすると、今度は以下のエラーが発生
```
error C1189: #error :  MFC does not support WINVER less than 0x0501.  Please change the definition of WINVER in your project properties or precompiled header.
```
5. ヘッダーファイルで定義されていた `0x0400` の部分を [適切な値](http://msdn.microsoft.com/ja-jp/library/6sehtctf.aspx) に変更
6. 再度ビルドしようとすると、今度は以下のエラーが発生
```
error C1083: include ファイルを開けません。'afxisapi.h':No such file or directory
```
7. [ここ](http://blogs.msdn.com/b/jpsanders/archive/2007/12/10/chttpserver-not-included-in-visual-studio-2008.aspx) を参考にして足りないライブラリを保管していく
 1. プロジェクトフォルダ以下に `LegacyMFCISAPI` フォルダを作成
 2. [ATL Server Library and Tools](http://atlserver.codeplex.com/) からソースをダウンロードし、解凍
 3. `include` フォルダ以下のファイルを `LegacyMFCISAPI` 以下にコピー
 4. まだ足りないファイルがある場合、そのファイルを 旧 Visual Studio から拾ってきて、 `LegacyMFCISAPI` フォルダ以下に置く
 5. プロジェクトを右クリックし、 `プロパティ > 構成プロパティ > VS++ディレクトリ` の `インクルードディレクトリ` に `$(SolutionDir)LegacyMFCISAPI` を追加
 6. 再びプロジェクトを右クリックし、 `追加 > 既存の項目` からファイルを選択し、Visual Studio に表示されるようにする（必須ではない）
8. 再度ビルドしようとすると、今度は以下のエラーが発生
```
error LNK1104: ファイル 'NAFXISD.lib' を開くことができません。
```
9. 足りない Lib ファイルを旧 Visual Studio から拾ってきて、 `LegacyMFCISAPI` 以下に置く
 * 別のフォルダを作ったほうが適切だが、今回は足りないファイルが少なかったため、このままにした
10. プロジェクトを右クリックし、 `プロパティ > 構成プロパティ > VS++ディレクトリ` の `ライブラリディレクトリ` に `$(SolutionDir)LegacyMFCISAPI` を追加
11. 再度ビルドしようとすると、今度は以下のエラーが発生
```
error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
```
12. プロジェクトを右クリックし、 `プロパティ > 構成プロパティ > リンカー > 詳細設定` の `安全な例外ハンドラーを含むイメージ` を `いいえ (/SAFESEH:NO)` に変更
13. 再度ビルドで成功

# 補足

今回はビルドまでの手順であり、作成されたものが以前と同様の動作をするかはまた別の話

# NG集

## Visual Studio 2013 の旧バージョンでのビルド機能を使ってみる

### 調査

1. プロジェクトを右クリックし、 `プロパティ > 構成プロパティ > 全般 > プラットフォームツールセット` を変更することでコンパイルに使用するバージョンを変更できる
2. 最初は `Visual Studio 2013(v120)` か `Visual Studio 2013 - Windows XP (v120_xp)` しか選べない
3. [選択肢を増やすには旧バージョンをインストールする](http://lab.planetleaf.com/windows/development-win/expand-platform-set-visual-studio-2013.html)
4. `Visual C++ 2010` をインストールすると、選択肢に `Visual Studio 2010 (v100)` と `Visual Studio 2008 (v90)` が増えた
5. が、`Visual C++ 2005` をインストールしても選択肢は増えない
 * 非対応？

## [mono framework](http://mono-project.com/Main_Page) を使ってみる

### 手順

1. 公式から最新版をダウンロードしてインストール
2. `Mono-3.2.3 Command Prompt` を起動
3. `cd /path/to/project`
4. `xbuild ./project.vcproj`
5. 以下のエラーが発生
```
/path/to/project/project.vcproj' is a VS2003 project, which is not supported by xbuild. You need to convert it to msbuild format to build with xbuild.
```
6. 一度 Visual Studio 2013 で変換し、再度ビルドを実行
7. 以下のエラーが発生
```
project.vcxproj could not import "$(VCTargetsPath)\Microsoft.Cpp.Default.props"
```
8. ギブアップ