目的
- 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 を多用している
- ソースはなるべく変えない
- ワタシ C++ ワカラナイネ~
手順
- Visual Studio 2013 でプロジェクトを開くと、自動で変換が発生する
- そのままビルドしようとすると、以下のエラーが発生
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.
- マルチバイト MFC ライブラリ をインストール
- 再度ビルドしようとすると、今度は以下のエラーが発生
error C1189: #error : MFC does not support WINVER less than 0x0501. Please change the definition of WINVER in your project properties or precompiled header.
- ヘッダーファイルで定義されていた
0x0400
の部分を 適切な値 に変更 - 再度ビルドしようとすると、今度は以下のエラーが発生
error C1083: include ファイルを開けません。'afxisapi.h':No such file or directory
- ここ を参考にして足りないライブラリを保管していく
- プロジェクトフォルダ以下に
LegacyMFCISAPI
フォルダを作成 - ATL Server Library and Tools からソースをダウンロードし、解凍
-
include
フォルダ以下のファイルをLegacyMFCISAPI
以下にコピー - まだ足りないファイルがある場合、そのファイルを 旧 Visual Studio から拾ってきて、
LegacyMFCISAPI
フォルダ以下に置く - プロジェクトを右クリックし、
プロパティ > 構成プロパティ > VS++ディレクトリ
のインクルードディレクトリ
に$(SolutionDir)LegacyMFCISAPI
を追加 - 再びプロジェクトを右クリックし、
追加 > 既存の項目
からファイルを選択し、Visual Studio に表示されるようにする(必須ではない) - 再度ビルドしようとすると、今度は以下のエラーが発生
error LNK1104: ファイル 'NAFXISD.lib' を開くことができません。
- 足りない Lib ファイルを旧 Visual Studio から拾ってきて、
LegacyMFCISAPI
以下に置く
- 別のフォルダを作ったほうが適切だが、今回は足りないファイルが少なかったため、このままにした
- プロジェクトを右クリックし、
プロパティ > 構成プロパティ > VS++ディレクトリ
のライブラリディレクトリ
に$(SolutionDir)LegacyMFCISAPI
を追加 - 再度ビルドしようとすると、今度は以下のエラーが発生
error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
- プロジェクトを右クリックし、
プロパティ > 構成プロパティ > リンカー > 詳細設定
の安全な例外ハンドラーを含むイメージ
をいいえ (/SAFESEH:NO)
に変更 - 再度ビルドで成功
補足
今回はビルドまでの手順であり、作成されたものが以前と同様の動作をするかはまた別の話
NG集
Visual Studio 2013 の旧バージョンでのビルド機能を使ってみる
調査
- プロジェクトを右クリックし、
プロパティ > 構成プロパティ > 全般 > プラットフォームツールセット
を変更することでコンパイルに使用するバージョンを変更できる - 最初は
Visual Studio 2013(v120)
かVisual Studio 2013 - Windows XP (v120_xp)
しか選べない - 選択肢を増やすには旧バージョンをインストールする
-
Visual C++ 2010
をインストールすると、選択肢にVisual Studio 2010 (v100)
とVisual Studio 2008 (v90)
が増えた - が、
Visual C++ 2005
をインストールしても選択肢は増えない
- 非対応?
mono framework を使ってみる
手順
- 公式から最新版をダウンロードしてインストール
-
Mono-3.2.3 Command Prompt
を起動 cd /path/to/project
xbuild ./project.vcproj
- 以下のエラーが発生
/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.
- 一度 Visual Studio 2013 で変換し、再度ビルドを実行
- 以下のエラーが発生
project.vcxproj could not import "$(VCTargetsPath)\Microsoft.Cpp.Default.props"
- ギブアップ