Hello Ys world ?

技術的なことや何か役立つこと、日々の活動を記録する

C++からAzure Storage Serviceを使おうとしたらエラーに引っかかりかけた

C++からAzure Storage Serviceを使うために、Microsoftのドキュメントを参考に進めていたらエラーが出て困った話。

環境

自分のPC環境は以下の通りである。

環境
OS Windows10 Pro 64bit version 1709
Visual Studio Community 2017 version15.7.6
NuGet パッケージマネージャー 4.6.0

やっていたこと

以下のMicrosoft Azureのドキュメントを参考に、Azure Storage ServiceのBLOBストレージを使うC++プログラムを作ろうとしていた。

docs.microsoft.com

NuGetパッケージマネージャーで wastorage をインストールして、ライブラリをインクルードした。VisualStudioの画面上ではエラーや警告の波線は出ていない

  • NuGetを使ってパッケージをインストール f:id:Ysss:20181011124646p:plain

  • ライブラリをインクルード f:id:Ysss:20181011125356p:plain

しかし、ビルドするとドキュメント通り行ったにもかかわらず、以下のエラーが出てくる。 f:id:Ysss:20181011125523p:plain

解決方法

上記のエラーの原因は、バージョン違い?によるライブラリ側の構文エラーと環境の問題であった。

ライブラリ側の構文エラーを直す

1行目の E0427 メンバー宣言では修飾名は使用できません のエラーは cpprestsdk のヘッダファイル asyncrt_utils.h の491行目で発生しており、以下の図の datetime:: に波線が出ていた。

波線の出ている datetime:: を削除することでエラーE0427は消える。

  • asyncrt_utils.h の 491行付近 f:id:Ysss:20181011130242p:plain

以下の図のようにGitHubにあるcpprestsdkの同様のファイルを見たら、構文はしっかりしているため、NuGetでインストールしたパッケージのcpprestsdkのバージョンの問題であると思われる。 f:id:Ysss:20181011131128p:plain

https://github.com/Microsoft/cpprestsdk/blob/master/Release/include/cpprest/asyncrt_utils.h

ライブラリに合った環境を設定

cpprestsdkとMicrosoftAzureStorageCPPのツールセットバージョンが v140 であり、Visual Studio 2017のツールセットは v141 である。そのため、ツールセットバージョンの違いにより、エラーが出ていた。

以下の図のように、Visual Studio 2017 Installerを起動し、個別のコンポーネントから デスクトップ用VC++ 2015.3 v14.00 (v140) ツールセット にチェックを入れ、インストールする。ツールセットの項目は「コンパイラ、ビルドツール、およびランタイム」の欄にある。 f:id:Ysss:20181011132206p:plain

インストールいたら、プロジェクトプロパティを開き、構成プロパティ > 全般 > プラットフォームツールセット から Visual Studio 2015 (v140) を選択し、適用する。

f:id:Ysss:20181011132450p:plain