MATLABからC+​+への変数の引き渡し​に対するエラーの解消​方法を調べています

10 ビュー (過去 30 日間)
RN
RN 2020 年 9 月 15 日
回答済み: Kojiro Saito 2020 年 9 月 15 日
上記の「C++へのMATLAB計算結果の取り込み」と同様のコードをC++で記述して、Visualstudio2019でビルドを行いましたが、
ヘッダーファイル「ArrayFactorry.hpp」内の168,195,534.606行目において「C2760 構文エラー:予期しないトークン’識別子’必要なトークン’式’」
のエラーが4カ所発生し、コンパイラが現在できない状況です。
エラーが発生している箇所の記述を以下に示します。(エラー発生個所を下線で示します)
167 typedef int (*CreateArrayWithDimsAndDataFcnPtr)(
168 impl::ArrayFactoryImpl * impl, int arraytype , size_t* dims, size_t numDims,
169 const void* const dataStart, size_t numEl, impl::ArrayImpl**);
~(省略)~
193 typename std::enable_if<std::is_arithmetic<T>::value, TypedArray<T>>::type createScalar(
194 const T val) {
195 typedef int (*CreateScalarArrayFcnPtr)(impl::ArrayFactoryImpl * impl, int arrayType,
196 const void* data, impl::ArrayImpl**);
~(省略)~
533 typedef int (*CreateArrayFromBufferV2FcnPtr)(
534 impl::ArrayFactoryImpl * impl, int arrayType, size_t* dims, size_t numDims,
535 void* buffer, void (*deleter)(void*), impl::ArrayImpl**, int memoryLayout);
~(省略)~
605 typedef int (*CreateSparseArrayFromBufferFcnPtr)(
606 impl::ArrayFactoryImpl * impl, int arrayType, size_t* dims, size_t numDims, size_t nnz,
607 void* dataBuffer, void (*dataDeleter)(void*), size_t* rowsBuffer,
608 void (*rowsDeleter)(void*), size_t* colsBuffer, void (*colsDeleter)(void*),
609 impl::ArrayImpl**);
コンパイラに必要と思われるヘッダーファイルを所有しているMATLABファイルからコピーして参照しております。
〇参照しているヘッダーファイル一覧
・「MatlabDataArray」フォルダ内
・「MatlabEngine」フォルダ内
・「MatlabExecutionInterface」フォルダ内
・MatlabDataArray.hpp
・MatlabEngine.hpp
・MatlabExecutionInterface.hpp
エラーの解決方法として調査したところVisualStudio内のプロパティの「C/C++」⇒「言語」⇒「準拠モード」⇒「いいえ」にする
ことで解決した報告を確認したため、同様の方法で設定しビルドを行ってみたところC2760のエラーはなくなりましたが
「LNK2019 未解決の外部シンボル __imp__cpp_engine_create_session が関数 "void __cdecl `anonymous namespace'::initSession(void)" (?initSession@?A0x352e24b4@@YAXXZ) で参照されました。」
のエラーが15件新たに発生しました。
こちらについてもエラー解決方法の調査を行っておりますが、上記ヘッダーファイルで不足しているファイルまたは設定事項があり、
ビルドができないためと考えております。
つきましてはこのエラーを解消しビルドが可能となる方法をご教授いただけないでしょうか?
よろしくお願い申し上げます。

回答 (1 件)

Kojiro Saito
Kojiro Saito 2020 年 9 月 15 日
こちらのドキュメント(C++ エンジン プログラムのビルド)にC++インタフェースを使う前提の説明がありますが、Visual Studio上ですと、
・プラットフォームの設定を「x64」にする
・プロジェクトのプロパティを開いて、「C/C++」→「全般」→「追加のインクルードディレクトリ」に「MATLAB_ROOT\extern\include」 (例:C:\Program Files\MATLAB\R2020a\extern\include) を追加
・「リンカー」の「追加のライブラリディレクトリ」に「MATLAB_ROOT\extern\lib\win64\microsoft」 (例:C:\Program Files\MATLAB\R2020a\extern\lib\win64\microsoft) を追加
・「リンカー」→「入力」で「追加の依存ファイル」に「libMatlabEngine.lib」と「libMatlabDataArray.lib」を追加
・環境変数Pathに「matlabroot\extern\bin\win64」(例:C:\Program Files\MATLAB\R2020a\extern\bin\win64)を追加
でビルドが通るようになります。

カテゴリ

Help Center および File ExchangeData Exchange and Mapping with C++ Applications についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!