Win版 開発環境をVisual Studio 2017に移行
以下ページからDirectX SDK (June 2010) をダウンロードする。
Download: DirectX SDK (June 2010) Microsoft Download Center - Download Details http://www.microsoft.com/en-us/download/details.aspx?id=6812 DXSDK_Jun10.exe
何もせずインストールすると「S1023」のエラーが発生するため、以下の手順で対処する。
(1) プログラムと機能から以下のアプリを削除 Microsoft Visual C++ 2010 x86 Redistributable 10.0.40219 Microsoft Visual C++ 2010 x64 Redistributable 10.0.40219 (2) DirectX SDK (June 2010) をインストール (3) プログラムと機能から以下のアプリを削除 Microsoft Visual C++ 2010 x86 Redistributable 10.0.30319 Microsoft Visual C++ 2010 x64 Redistributable 10.0.30319 (4) 削除したアプリを再インストール(以下のインストーラをダウンロードして実行) Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x86) https://www.microsoft.com/ja-jp/download/details.aspx?id=8328 vcredist_x86.exe Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x64) https://www.microsoft.com/ja-jp/download/details.aspx?id=13523 vcredist_x64.exe (5) プログラムと機能で以下のアプリがインストールされていることを確認 Microsoft Visual C++ 2010 x86 Redistributable 10.0.40219 Microsoft Visual C++ 2010 x64 Redistributable 10.0.40219 参考: DirectX SDKインストール時に”S1023エラー”が出る時の対処法 http://nanoappli.com/blog/archives/4739
以下ページからVisual Studio Community 2017のインストーラをダウンロードする。
Microsoft / Visual Studio / ダウンロード https://visualstudio.microsoft.com/ja/downloads/ Visual Studio 2017 コミュニティ vs_community__201888740.1552141627.exe
インストーラ起動後に以下のワークロードを選択する。
* C++によるデスクトップ開発 デフォルトの選択項目に対して「Windows 8.1 SDKとUCRT SDK」を追加選択 * C++によるゲーム開発
MIDITrailのソリューションファイル(MIDITrail.sln)を開く。 「プロジェクトとソリューションの変更をレビュー」が表示されるので許可する。
ソリューションエクスプローラーで「MIDITrail」プロジェクトを右クリックして「プロパティ」を選択。 ソリューションを右クリックするわけではないことに注意。
「構成プロパティ」の「VC++ディレクトリ」を選択。 構成とプラットフォームを選択してインクルードディレクトリとライブラリディレクトリを追加。
インクルードディレクトリ Win32/x64共通 C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include ライブラリディレクトリ Win32の場合 C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib\x86 x64の場合 C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib\x64
インストール時に「Windows 8.1 SDKとUCRT SDK」を追加していなかった場合、 ビルドすると以下のエラーが発生する。
MSB8036 Windows SDK バージョン 8.1 が見つかりませんでした。必要なバージョンの Windows SDK をインストールするか、プロジェクト プロパティ ページで SDK バージョンを変更するか、ソリューションを右クリックして [ソリューションの再ターゲット] を選択してください。このエラーが発生した場合は「ツール」メニューから「ツールと機能を取得...」を選択。 Visual Studio Installerが起動するので、「C++によるデスクトップ開発」を選択。 「Windows 8.1 SDKとUCRT SDK」のチェックマークを付けて変更ボタンを押す。
ynerrinfo.h(78): warning C4251: 'YNBaseLib::YNErrInfo::m_FuncName': class 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' は __export キーワードを使って class 'YNBaseLib::YNErrInfo' にエクスポートしてください。 xstring(4373): note: 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' の宣言を確認してください ynerrinfo.h(79): warning C4251: 'YNBaseLib::YNErrInfo::m_Message': class 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' は __export キーワードを使って class 'YNBaseLib::YNErrInfo' にエクスポートしてください。 xstring(4373): note: 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' の宣言を確認してください ※パス省略
対策:YNErrInfo.hにて、pragmaを用いて警告を無効化する。
#pragma warning(disable:4251) string m_FuncName; string m_Message; #pragma warning(default:4251)
ynerrctrl.cpp(192): warning C4477: 'sprintf_s' : 書式文字列 '%08X' には、型 'unsigned int' の引数が必要ですが、可変個引数 3 は型 'unsigned __int64' です ynerrctrl.cpp(192): note: 書式文字列に '%llX' を使用することをお勧めします ynerrctrl.cpp(192): note: 書式文字列に '%I64X' を使用することをお勧めします ※パス省略
対策:YNErrCtrl::ShowErrの書式文字列を修正する。
変更前:_T("\n\nFUNC: %s\nLINE: %d\nINFO: %08X %08X"), 変更後:_T("\n\nFUNC: %s\nLINE: %d\nINFO: %08llX %08llX"),
cl : コマンド ライン warning D9035: オプション 'Gm' の使用は現在推奨されていません。今後のバージョンからは削除されます。
対策:プロジェクト設定を変更して最小リビルドを無効にする。 YNBaseLib,SMIDILib,MIDITrailのそれぞれのプロジェクトで以下の設定変更を実施する。
プロジェクトを右クリックしてプロパティを選択 「構成プロパティ / C/C++ / コード生成」を選択 構成とプラットフォームを選択して「最小リビルドを有効にする」を「はい」から「いいえ」に変更 (1) 構成:Debug プラットフォーム:Win32 (2) 構成:Debug プラットフォーム:x64 ※構成:Release は「いいえ」が選択されているため対策不要
dllmain.obj : warning LNK4075: /EDITANDCONTINUE は /SAFESEH の指定によって無視されます。 dllmain.obj : warning LNK4075: /EDITANDCONTINUE は /SAFESEH の指定によって無視されます。 DIKeyCtrl.obj : warning LNK4075: /EDITANDCONTINUE は /SAFESEH の指定によって無視されます。
対策:*.vcxprojファイルにUseDebugLibrariesの属性を追加。Debugはtrue、Releaseはfalseとする。
MIDITrail.vcxproj ---- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries> ★追加 <PlatformToolset>v141</PlatformToolset> <CharacterSet>MultiByte</CharacterSet> <WholeProgramOptimization>true</WholeProgramOptimization> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries> ★追加 <PlatformToolset>v141</PlatformToolset> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries> ★追加 <PlatformToolset>v141</PlatformToolset> <CharacterSet>MultiByte</CharacterSet> <WholeProgramOptimization>true</WholeProgramOptimization> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries> ★追加 <PlatformToolset>v141</PlatformToolset> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> ---- YNBaseLib.vcxproj, SMIDILib.vcxproj も同様に属性を追加する。参考ページ
「warning LNK4075: /EDITANDCONTINUE は /SAFESEH の指定によって無視されます」の本当の対処法 https://qiita.com/gocha/items/d690f1240813aef8b303
dimousectrl.cpp(339): warning C4644: 定数式でのマクロベースの offsetof パターンの使用は非標準です。代わりに、C++ 標準ライブラリで定義された offsetof を使用してください dimousectrl.cpp(345): warning C4644: 定数式でのマクロベースの offsetof パターンの使用は非標準です。代わりに、C++ 標準ライブラリで定義された offsetof を使用してください dimousectrl.cpp(351): warning C4644: 定数式でのマクロベースの offsetof パターンの使用は非標準です。代わりに、C++ 標準ライブラリで定義された offsetof を使用してください ※パス省略
対策:DirectX9のヘッダファイル(dinput.h)に起因する問題のため、この警告を無視する。
imagehlp.h(1873): warning C4091: 'typedef ': 変数が何も宣言されていないときは、'<unnamed-enum-hdBase>' の左辺を無視します。 imagehlp.h(3519): warning C4091: 'typedef ': 変数が何も宣言されていないときは、'<unnamed-enum-sfImage>' の左辺を無視します。
対策:Windows 8.1 SDKのヘッダファイル(imagehlp.h)に起因する問題のため、この警告を無視する。
Visual C++ランタイムライブラリがインストールされていない環境でもMIDITrailが動作するように、 アプリ配布時にランタイムライブラリを同梱している。 Visual Studio 2017移行に伴い、ランタイムライブラリのファイルと配置場所を変える。 これまでのランタイムライブラリ配置方法は、以下のチケットに記載している。
変更前:Microsoft.VC90.CRTフォルダの下にライブラリを配置
MIDITrail.exe Microsoft.VC90.CRT/ Microsoft.VC90.CRT.manifest msvcm90.dll msvcp90.dll msvcr90.dll変更後:MIDITrail.exeと同じフォルダにライブラリを配置
MIDITrail.exe concrt140.dll msvcp140.dll msvcp140_1.dll msvcp140_2.dll vccorlib140.dll vcruntime140.dllランタイムライブラリのコピー元パス
x86用 C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Redist\MSVC\14.16.27012\x86\Microsoft.VC141.CRT x64用 C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Redist\MSVC\14.16.27012\x64\Microsoft.VC141.CRT参考ページ
Visual C++ 2015 アプリケーションでの CRT ローカル配置について https://blogs.msdn.microsoft.com/jpvsblog/2016/08/04/ucrt_local_deployment/
サポート対象OSからWindows 2000,XP,Vistaを削除。 Windows 2000,XP,Vistaに関連する注意事項を削除。
アプリリリース時に添付するリソースファイルを、ソースツリーに追加する。
MIDITrail MIDITrail/ SMIDILib/ YNBaseLib/ Resources/ ★追加 conf/ data/ doc/ LICENCE.txt README.en.txt README.ja.txt
開発環境をVisual Studio 2017に移行する。
理由は以下の通り。
すでにVisual Studio 2019がリリースされているが、1カ月前の2019/4/2に 公開されたばかりで情報が少ないため、利用を避ける。
開発環境の変更に伴い、MIDITrailのサポート対象OSを変更する。
すなわち、Windows 2000,XP,Vistaをサポート対象外とする。 これらのOSはすでにMSのサポート期限が切れている。
Visual Studio 2017でもXP対応のアプリはビルド可能だが、 コストに対する効果がほとんどないため、対応しない。
開発環境のOSはWindows 10とする。