OSDN Ticket Archive


Ticket #39226

Win版 開発環境をVisual Studio 2017に移行

登録: 2019-05-07 23:58 最終更新: 2019-05-12 11:06

報告者:
yknk
担当者:
yknk
チケットの種類:
機能リクエスト
状況:
完了
コンポーネント:
MIDITrail Ver.1.2.x for Windows
マイルストーン:
Version 1.2.5 for Windows (完了済み)
優先度:
5 - 中
重要度:
5 - 中
解決法:
修正済み
ファイル:
なし

詳細

開発環境をVisual Studio 2017に移行する。

  • 変更前:Visual Studio 2008 Standard Edition
  • 変更後:Visual Studio Community 2017

理由は以下の通り。

  • Visual Studio 2008はMSのサポート期限が切れている
  • Visual Studio 2008を動作させるOS環境が維持できない

すでにVisual Studio 2019がリリースされているが、1カ月前の2019/4/2に 公開されたばかりで情報が少ないため、利用を避ける。

開発環境の変更に伴い、MIDITrailのサポート対象OSを変更する。

  • 変更前:Windows 2000,XP,Vista,7,8,10
  • 変更後:Windows 7,8,10

すなわち、Windows 2000,XP,Vistaをサポート対象外とする。 これらのOSはすでにMSのサポート期限が切れている。

Visual Studio 2017でもXP対応のアプリはビルド可能だが、 コストに対する効果がほとんどないため、対応しない。

開発環境のOSはWindows 10とする。

チケットの履歴

2019-05-07 23:58 更新者: yknk
  • 新しいチケット "Win版 開発環境をVisual Studio 2017に移行" が作成されました
2019-05-07 23:59 更新者: yknk
コメント

開発環境構築 1:DirectX 9.0 SDKのインストール

SDKのダウンロード

以下ページから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

2019-05-07 23:59 更新者: yknk
コメント

開発環境構築 2:Visual Studio Community 2017のインストール

インストーラのダウンロード

以下ページから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++によるゲーム開発

2019-05-08 00:00 更新者: yknk
コメント

開発環境構築 3:プロジェクト設定

ソリューションファイルを開く

MIDITrailのソリューションファイル(MIDITrail.sln)を開く。 「プロジェクトとソリューションの変更をレビュー」が表示されるので許可する。

DirectX 9.0 SDKのインクルードディレクトリとライブラリディレクトリの設定

ソリューションエクスプローラーで「MIDITrail」プロジェクトを右クリックして「プロパティ」を選択。 ソリューションを右クリックするわけではないことに注意。

「構成プロパティ」の「VC++ディレクトリ」を選択。 構成とプラットフォームを選択してインクルードディレクトリとライブラリディレクトリを追加。

  • (1) 構成:Debug プラットフォーム:Win32
  • (2) 構成:Debug プラットフォーム:x64
  • (3) 構成:Release プラットフォーム:Win32
  • (4) 構成:Relsese プラットフォーム:x64
    インクルードディレクトリ
      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
    

SDKの追加

インストール時に「Windows 8.1 SDKとUCRT SDK」を追加していなかった場合、 ビルドすると以下のエラーが発生する。

MSB8036
Windows SDK バージョン 8.1 が見つかりませんでした。必要なバージョンの 
Windows SDK をインストールするか、プロジェクト プロパティ ページで 
SDK バージョンを変更するか、ソリューションを右クリックして 
[ソリューションの再ターゲット] を選択してください。
このエラーが発生した場合は「ツール」メニューから「ツールと機能を取得...」を選択。 Visual Studio Installerが起動するので、「C++によるデスクトップ開発」を選択。 「Windows 8.1 SDKとUCRT SDK」のチェックマークを付けて変更ボタンを押す。

2019-05-08 00:01 更新者: yknk
コメント

対策 1:ビルドエラー対応

警告 1

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)

警告 2

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"),

警告 3

cl : コマンド ライン warning D9035: オプション 'Gm' の使用は現在推奨されていません。今後のバージョンからは削除されます。

対策:プロジェクト設定を変更して最小リビルドを無効にする。 YNBaseLib,SMIDILib,MIDITrailのそれぞれのプロジェクトで以下の設定変更を実施する。

プロジェクトを右クリックしてプロパティを選択
「構成プロパティ / C/C++ / コード生成」を選択
構成とプラットフォームを選択して「最小リビルドを有効にする」を「はい」から「いいえ」に変更
(1) 構成:Debug プラットフォーム:Win32
(2) 構成:Debug プラットフォーム:x64
※構成:Release は「いいえ」が選択されているため対策不要

2019-05-08 00:02 更新者: yknk
コメント

対策 1:ビルドエラー対応(続き)

警告 4

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

2019-05-08 00:02 更新者: yknk
コメント

対策 1:ビルドエラー対応(続き)

警告 5

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)に起因する問題のため、この警告を無視する。

警告 6

imagehlp.h(1873): warning C4091: 'typedef ': 変数が何も宣言されていないときは、'<unnamed-enum-hdBase>' の左辺を無視します。
imagehlp.h(3519): warning C4091: 'typedef ': 変数が何も宣言されていないときは、'<unnamed-enum-sfImage>' の左辺を無視します。

対策:Windows 8.1 SDKのヘッダファイル(imagehlp.h)に起因する問題のため、この警告を無視する。

2019-05-08 00:03 更新者: yknk
コメント

対策 2:アプリ配布時のランタイムライブラリ同梱

Visual C++ランタイムライブラリがインストールされていない環境でもMIDITrailが動作するように、 アプリ配布時にランタイムライブラリを同梱している。 Visual Studio 2017移行に伴い、ランタイムライブラリのファイルと配置場所を変える。 これまでのランタイムライブラリ配置方法は、以下のチケットに記載している。

  • #22102 Visual C++ランタイムライブラリが見つからず起動が失敗する

変更前: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/

2019-05-08 00:03 更新者: yknk
コメント

対策 3:マニュアル修正

サポート対象OSからWindows 2000,XP,Vistaを削除。 Windows 2000,XP,Vistaに関連する注意事項を削除。

2019-05-12 11:01 更新者: yknk
コメント

対策 4:リソースファイル追加

アプリリリース時に添付するリソースファイルを、ソースツリーに追加する。

MIDITrail
  MIDITrail/
  SMIDILib/
  YNBaseLib/
  Resources/ ★追加
    conf/
    data/
    doc/
    LICENCE.txt
    README.en.txt
    README.ja.txt

2019-05-12 11:06 更新者: yknk
  • 解決法なし から 修正済み に更新されました
  • 状況オープン から 完了 に更新されました

添付ファイルリスト

添付ファイルはありません