loadlibrary による 外部 DLL の使用をMATLAB Compiler で配布するサンプルはありますか?

16 views (last 30 days)
loadlibrary コマンドを使用して C 共有ライブラリを使用しているプログラムがあります。
これを MATLAB Compiler でスタンドアロンアプリケーション化し、実行するとエラーとなります。
手順のサンプルはありますか?

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 15 Jul 2020
■使用するファイル
共有ライブラリ shrlibsample
>>web(fullfile(docroot, 'matlab/matlab_external/sample-shared-library-shrlibsample.html'))
これはloadlibraryコマンドのヘルプで使用されるライブラリです。ファイルの拡張子は.mexw64となっておりますが、基本的には.dllのファイルと同等にご使用いただくことができます。
>>web(fullfile(docroot, 'matlab/ref/loadlibrary.html'))
■手順
(1) 作業フォルダに以下のライブラリファイルとヘッダファイルをコピーします。
shrhelp.h
shrlibsample.h
shrlibsample.mexw64
これらのファイルは「<MATLABインストールフォルダ>\extern\examples\shrlib」にあります。
(2)コンパイル前に念のため以下で実行の可否を確認します。
loadlibrary('shrlibsample')
libfunctions('shrlibsample')
struct.p1 = 4; struct.p2 = 7.3; struct.p3 = -290;
[res,st] = calllib('shrlibsample','addStructByRef',struct)
unloadlibrary shrlibsample
(3)コンパイル前にプロトタイプファイルを生成します。プロトタイプファイルはコンパイルの際にヘッダファイルとして使用されます。ここではmylibraryfile.mというファイルが生成されます。
>> loadlibrary('shrlibsample','shrlibsample.h','mfilename','mylibraryfile');
(4)以下のようなプロトタイプを使用するプログラム(例:Untitled.m)を用意します。こちらはMATLAB上でも実行可能ですので、念のため実行します。
loadlibrary('shrlibsample', @mylibraryfile);
libfunctions('shrlibsample','-full');
struct.p1 = 4; struct.p2 = 7.3; struct.p3 = -290;
[res,st] = calllib('shrlibsample','addStructByRef',struct)
unloadlibrary shrlibsample
(5) 以下のコマンド等でアプリケーションコンパイラを起動します。
>>deploytool
(6) メインファイルにUntitled.mを追加します。
(7)「アプリケーションの実行に必要なファイル」に以下を追加します。
mylibraryfile.m (自動で追加されます)
shrlibsample.mexw64
shrlibsample_thunk_pcwin64.dll
(8)「ランタイム追加設定」の「Windowsの実行コマンドシェル(コンソール)を表示しない」のチェックを「外し」ます。これによりコマンドプロンプト(DOS窓)に結果等が表示されます。
(9)「パッケージ化」ボタンでコンパイルを開始します。終了後、エクスプローラで生成されたフォルダが表示されます。
(10)コマンドプロンプトを開き、cd等を使用して上記の「for_testing」フォルダに移動し、Untitled.exe を実行します。
※mcc コマンドの場合は以下のようにします。
>>mcc -v -m out.m -a 'mylibraryfile.m' -a 'shrlibsample.dll' -a 'shrlibsample_thunk_pcwin64.dll'

More Answers (0)

Tags

No tags entered yet.

Products


Release

R2011b

Community Treasure Hunt

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

Start Hunting!