MATLAB Answers

0

dllファイルの動かない問題

WAN PYO HONG さんによって質問されました 2019 年 9 月 17 日
最新アクティビティ WAN PYO HONG さんによって コメントされました 2019 年 9 月 24 日
MATLABに学習した結果(ネットワーク)を保存してC++共有ライブラリファイルを作って他のC++プログラムに連動しています。
でも、Win10とVisualStudio2015が設定してあるパソコン2台から同一な”.Mat”ファイルを使ってdllファイルを作る場合、dllファイルが動かない現象が発生しています。
例えば、
パソコン1(Win10、VisualStudio2015、2018b)、日本語版:C++用DLLファイル作成 → 他のプログラムに連動可能
パソコン2(Win10、VisualStudio2015、2018b)、韓国語版:C++用DLLファイル作成 → 他のプログラムに連動不可(DLLの初期化が失敗)
上記事項についてなんか他の確認が必要な事項がありますか。

  2 件のコメント

Kojiro Saito
2019 年 9 月 17 日
DLLの初期化失敗のエラーメッセージを教えていただけますか?
WAN PYO HONG 2019 年 9 月 17 日
ご確認ありがとうございます。
MALABに作成したDLLはVisualStudio2015 Professionalsに連動が必要な状況です。
VisualStudioから発生しているエラーは
LNK2019 未解決の外部シンボル "__declspec(dllimport) void __cdecl DL_TEST(int,class mwArray &,class mwArray &,class mwArray const &,class mwArray const &,class mwArray const &)" (__imp_?DL_TEST@@YAXHAEAVmwArray@@0AEBV1@11@Z) が関数 "protected: virtual int __cdecl CGetTestVCDlg::OnInitDialog(void)" (?OnInitDialog@CGetTestVCDlg@@MEAAHXZ) で参照されました。。。
上記のVisualStudioから出てあるエラーですけれども

サインイン to comment.

1 件の回答

Kojiro Saito
回答者: Kojiro Saito
2019 年 9 月 17 日

LNK2019のエラーなので以下2点が考えられます。
(1)ソリューションのプラットフォーム
Visual Studioでソリューションのプラットフォームがx64になっていますでしょうか?
visualstudio_platform.png
(2)追加の依存ファイル
こちらのAnswerのように、追加の依存ファイルの設定が漏れている可能性があります。
「プロジェクト」 -> 「プロパティ」 -> 「リンカ」 -> 「入力」 -> 「追加の依存ファイル」にmclmcrrt.libが追加されていますでしょうか?

  7 件のコメント

WAN PYO HONG 2019 年 9 月 18 日
ご確認ありがとうございます。
(結果について)
1.PC1で作成したdllをPC2にコピーして、PC2で適用 (dllを差し替え)→動作可能
2.PC2で作成したdllをPC1にコピーして、PC1で適用 (dllを差し替え)→動作不可
上記2番の場合、ビルドする時に(LNK2019)エラーが発生してビルドができなかったです。
追加でテストした内容としては
2番の場合、ビルド完了しました。でも、MATLABの変数を呼出するとき、mclmcr.dllの記号がロードしないとエラーが出ました。
今回はDLL作成した時、Build CompilerをC++に変わりました。
mclmcr.dllについてなんか設定することがありますか。
Kojiro Saito
2019 年 9 月 19 日
mclmcr.dllはMATLAB_RuntimeまたはMATLABのbin\win64フォルダーにあります。ファイルが存在しているか確認して、もし存在していなかったらインストールが失敗している可能性があるのでMATLAB Runtimeの再インストールが必要となります。
また、他のソフトウェアでmclmcr.dllと同じ名前のライブラリを使ってファイル競合が起きている場合もあるので、その場合は環境変数PathでMATLAB Runtimeのパスを一番上に持ってきてみてください。
WAN PYO HONG 2019 年 9 月 24 日
上記の設定にも得意事項がないです。
もっと確認します。
ご対応ありがとうございます。

サインイン to comment.