Share via


移植のガイド: MFC Scribble

このトピックは、古いバージョンの Visual Studio で作成された Visual Studio C++ プロジェクトを Visual Studio 2017 にアップグレードする手順を紹介する複数のトピックの 1 つ目です。 これらのトピックでは、例によってアップグレード プロセスを照会し、とてもシンプルなプロジェクトから始めて、少し複雑なものに進みます。 このトピックでは、特定のプロジェクト (MFC Scribble) についてのアップグレード プロセスの作業を行います。 これは、C++ プロジェクトのアップグレード プロセスに関する基本的な紹介として適しています。

各バージョンの Visual Studio には、古いバージョンの Visual Studio から新しいバージョンへの移動を複雑にする可能性のある、非互換性が持ち込まれることがあります。 必要な変更がコード内にあり、コードを再コンパイルして更新しなければならないことがあり、必要な変更がプロジェクト ファイル内にあることもあります。 以前のバージョンの Visual Studio で作成されたプロジェクトを開くと、Visual Studio によりプロジェクトまたはソリューションを最新バージョンに更新するかどうかが自動的に確認されます。 これらのツールは通常、プロジェクト ファイルのみをアップグレードします。これらは、ソース コードは変更しません。

MFC Scribble

MFC Scribble は、多くの異なるリリースの Visual C++ に含まれている、よく知られているサンプルです。 これは、MFC の基本的な機能の一部を示す、簡単な描画アプリケーションです。 様々なバージョンを利用でき、マネージド コードとネイティブ コードの両方のバージョンがあります。 この例では、Scribble の旧バージョンが Visual Studio 2005 からのネイティブ コードで見つかり、Visual Studio 2017 で開いています。

アップグレードを試みる前に、Windows デスクトップ ワークロードがインストールされていることを確認します。 Visual Studio インストーラー (vs_installer.exe) を開きます。 インストーラーを開くには、[ファイル][新しいプロジェクト] の順に選択し、[Visual Studio インストーラーを開く] が表示されるまで、インストールされたテンプレートを下方にスクロールするという方法があります。 インストーラーを開くと、使用可能なすべてのワークロードが表示されます。 Windows デスクトップ ワークロードに対するボックスが選択されていない場合は、それを選択し、ウィンドウの下部にある [変更] ボタンをクリックします。

次に、ソリューション全体と、その内容をすべてバックアップします。

最後に、最新バージョンの Visual Studio でソリューションを開き、ウィザードでプロジェクトを変換できるようにします。

また、ウィザードを使用してプロジェクトをアップグレードする代わりに、コマンドラインで /Upgrade オプションを使用して devenv を実行できることに注意してください。 「/Upgrade (devenv.exe)」を参照してください。 これは、多数のプロジェクトのアップグレード プロセスを自動化するのに役に立ちます。

ステップ 1。 プロジェクト ファイルを変換する

Visual Studio で古いプロジェクト ファイルを開くと、プロジェクト ファイルを最新バージョンに変換することを勧められるので、これを受け入れます。 次のダイアログ ボックスが表示されました。

Review Project and Solution Changes dialog.

Itanium のターゲットは使用できず、変換されないことを通知するエラーが発生しました。

Platform 'Itanium' is missing from this project. All the configurations and their file configuration settings specific to this platform will be ignored. If you want this platform converted, please make sure you have the corresponding platform installed under '%vctargetpath%\platforms\Itanium'. Continue to convert this project without this platform?

前の Scribble プロジェクトの作成時、Itanium は重要なターゲット プラットフォームでした。 Windows プラットフォームは Itanium をサポートしなくなったので、Itanium プラットフォームをサポートせずに続行するように選択しました。

Visual Studio で、古いプロジェクト ファイルのすべての問題を一覧表示する、移行レポートが表示されました。

Screenshot of the Upgrade Report.

ここでは、問題がすべて警告であり、Visual Studio がプロジェクト ファイルで適切な変更を行いました。 プロジェクトに関する大きな違いは、ビルド ツールが vcbuild から msbuild に変更されたことです。 この変更は、Visual Studio 2010 で初めて導入されました。 その他の変更点として、プロジェクト ファイル自体にいくつかの要素のシーケンスの再配列が含まれます。 このシンプルなプロジェクトについて、これ以上注意が必要な問題はありません。

ステップ 2. ビルドできる状態にする

ビルド前に、プロジェクト システムがどのコンパイラのバージョンを使用しているのかを知るため、プラットフォーム ツールセットを確認します。 [プロジェクトのプロパティ] ダイアログの [構成プロパティ] にある [全般] カテゴリで、[プラットフォーム ツールセット] プロパティを確認します。 それには、Visual Studio のバージョンとプラットフォームのツールのバージョン番号が含まれ、このケースではツールの Visual Studio 2017 のバージョンは v141 です。 もともと Visual Studio 2010、2012、2013、または 2015 を使用してコンパイルされたプロジェクトを変換する場合、ツールセットは最新のツールセットに自動的には更新されません。

Unicode に切り替えるには、プロジェクトのプロパティを開き、[構成プロパティ][全般] セクションを選択して、[文字セット] プロパティを探します。 これを [マルチ バイト文字セットを使用する] から [Unicode 文字セットを使用する] に変更します。 この変更の影響として、_UNICODE と UNICODE のマクロが定義されて、_MBCS が定義されなくなります。このことは、[コマンド ライン] プロパティの [C/C++] カテゴリで確認できます。

/GS /analyze- /W4 /Zc:wchar_t /Zi /Gm- /Od /Fd".\Debug\vc141.pdb" /Zc:inline /fp:precise /D "_AFXDLL" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX /Zc:forScope /Gd /Oy- /MDd /Fa".\Debug\" /EHsc /nologo /Fo".\Debug\" /Fp".\Debug\Scribble.pch" /diagnostics:classic

Scribble プロジェクトは Unicode 文字を使用してコンパイルするように設定されていませんでしたが、既に char の代わりに TCHAR を使用して作成されているので、実際には何も変更する必要がありません。 Unicode 文字セットを使用して、プロジェクトが正常にビルドされます。

ここで、ソリューションをビルドします。 出力ウィンドウに、コンパイラによって _WINNT32_WINNT が定義されていないことが通知されます。

_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)

これは、エラーではなく警告であり、Visual Studio C++ プロジェクトをアップグレードするときに、ごく一般的に見られます。 これは、アプリケーションが動作する Windows の最も低いバージョンを定義するマクロです。 警告を無視する場合は、現在のバージョンの Windows という意味である、既定値の _WIN32_WINNT_MAXVER をそのまま使用します。 使用可能な値のテーブルについては、「Using the Windows Headers」 (Windows ヘッダーの使用) を参照してください。 たとえば、Vista 以降のすべてのバージョンで動作するよう設定できます。

#define _WIN32_WINNT _WIN32_WINNT_VISTA

このマクロで指定する Windows のバージョンで利用できない Windows API のパーツをコードが使用している場合には、コンパイラ エラーとして表示されます。 Scribble コードの場合は、エラーはありません。

手順 3. テストとデバッグ

テスト スイートはないため、アプリを起動して、UI から手動で機能をテストしました。 問題は検出されませんでした。

手順 4. レイアウトを改良する

Visual Studio 2017 に移行したので、C++ の新機能を活用するためにいくつかの変更を加えます。 現在のバージョンの C++ コンパイラは、以前のバージョンよりも C++ への適合性が向上しているので、コードの安全性を高めるためにコードを変更し、ほかのコンパイラやオペレーティング システムへの移植性を高めたい場合には、幾らかの改良を加えることを検討してください。

次のステップ

Scribble は小規模で単純な Windows デスクトップ アプリケーションであり、変換は難しくありません。 多くの小規模で単純なアプリケーションは、新しいバージョンに簡単に変換できます。 コードの行数が多く、エンジニアリングの最新の標準になっていない可能性がある古いレガシー コードや、複数のプロジェクトとライブラリ、カスタム ビルド アプリを持つ複雑なアプリケーションや、複雑なスクリプトを作成して自動化されていビルドでは、アップグレードにもう少し時間がかかります。 次の例の COM Spy と呼ばれる ATL/COM アプリケーションに進みます。

関連項目

移植およびアップグレード: 例とケース スタディ
次の例: COM Spy