LoginSignup
10
9

More than 5 years have passed since last update.

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

Posted at

目的

  • 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++ ワカラナイネ~

手順

  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 ライブラリ をインストール
  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 の部分を 適切な値 に変更
  6. 再度ビルドしようとすると、今度は以下のエラーが発生 error C1083: include ファイルを開けません。'afxisapi.h':No such file or directory
  7. ここ を参考にして足りないライブラリを保管していく
    1. プロジェクトフォルダ以下に LegacyMFCISAPI フォルダを作成
    2. ATL Server Library and Tools からソースをダウンロードし、解凍
    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. 選択肢を増やすには旧バージョンをインストールする
  4. Visual C++ 2010 をインストールすると、選択肢に Visual Studio 2010 (v100)Visual Studio 2008 (v90) が増えた
  5. が、Visual C++ 2005 をインストールしても選択肢は増えない
    • 非対応?

mono framework を使ってみる

手順

  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. ギブアップ
10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9