C 共有ライブラリの呼び出し
MATLAB® Compiler SDK™ で生成された 1 つ以上の C 共有ライブラリを C アプリケーションで使用するには、次のようにします。
生成された各ライブラリのヘッダー ファイルをアプリケーションに含めます。
生成された各共有ライブラリに
という名前のヘッダー ファイルが関連付けられています。libname
.hmclmcrInitialize
を呼び出して MATLAB Runtime プロキシ層を初期化します。MATLAB で生成された共有ライブラリを使用するドライバー コードで、
mclRunMain
を使用して C 関数を呼び出します。mclRunMain()
は、共有ライブラリの MATLAB コードの実行をラップする便利なクロス プラットフォームのメカニズムを提供します。注意
Mac では、アプリケーション自体で完全なグラフィカル環境を立ち上げる場合は
mclRunMain()
を使用しないでください。変数を定義し、入力引数を処理します。
関数
mclInitializeApplication
を呼び出して MATLAB Runtime を初期化します。この関数は、グローバルな MATLAB Runtime の状態を設定し、MATLAB Runtime インスタンスの構成を可能にします。関数
mclInitializeApplication()
はアプリケーションごとに 1 回呼び出します。他のいずれの MATLAB API 関数よりも前に呼び出す必要があります。この関数には、アプリケーションレベルのオプションを渡すことができます。mclInitializeApplication()
は boolean のステータス コードを返します。注意
mclInitializeApplication
を呼び出す前にドライバー アプリケーションからcd
コマンドを発行することは避けてください。そうしないと、MATLAB Runtime の初期化に失敗することがあります。アプリケーションに含める各 C 共有ライブラリについて、ライブラリの初期化関数を呼び出します。
初期化関数は、ライブラリのローカルの初期化を実行します。デプロイ可能なアーカイブをアンパックし、そのアーカイブのコードを実行するために必要な情報を使用して MATLAB Runtime インスタンスを開始します。ライブラリの初期化関数の名前は
です。この関数は boolean のステータス コードを返します。libname
Initialize()メモ:
Windows® では、共有ライブラリにより MATLAB 共有ライブラリを呼び出す場合、
DllMain(DLL_ATTACH_PROCESS)
の呼び出しで共有ライブラリから MATLAB ライブラリ初期化関数 (たとえば、<libname>Initialize, <libname>Terminate, mclInitialize, mclTerminate
) を呼び出すことはできません。これは、中間共有ライブラリを暗黙的に読み込む場合にも明示的に読み込む場合にも当てはまります。この呼び出しはDllMain()
の後に配置してください。ライブラリの関数を呼び出し、結果を処理します。(これがプログラムの本体です。)
メモ:
ドライバー アプリケーションで MATLAB Figure ウィンドウを表示する場合は、次の 2 つの手順で関数
Terminate
およびmclTerminateApplication
を呼び出す前に、mclWaitForFiguresToDie
の呼び出しを含めます。アプリケーションで特定のライブラリが不要になった場合は、そのライブラリの終了関数を呼び出します。
終了関数は、ライブラリの MATLAB Runtime インスタンスに関連付けられているリソースを解放します。ライブラリの終了関数の名前は
です。ライブラリを終了すると、そのライブラリによってエクスポートされた関数をアプリケーション内に再度呼び出すことはできなくなります。libname
Terminate()注意
<lib>Terminate
の呼び出しの後に<lib>Initialize
の呼び出しを発行すると (ライブラリが同じ場合も同じでない場合も同様)、予期しない結果になることがあります。アプリケーションでいずれの共有ライブラリも呼び出す必要がなくなった場合は、API 関数
mclTerminateApplication
を呼び出します。この関数は、MATLAB Runtime で使用されるアプリケーションレベルのリソースを解放します。この関数を呼び出すと、アプリケーションで共有ライブラリの呼び出しをそれ以上できなくなります。
変数をクリーンアップし、ファイルを閉じて終了します。
次の matrix.c
の例は、上記のすべての手順を示しています。
C ドライバー アプリケーションからの C 共有ライブラリの呼び出し
MATLAB 関数 loadlibrary
を使用する際の制限
MATLAB Compiler SDK でビルドされた C 共有ライブラリを MATLAB で MATLAB 関数 loadlibrary
を使用して読み込むことはできません。
loadlibrary
の使用の詳細については、デプロイ アプリケーションでの共有ライブラリの呼び出しを参照してください。
参考
mclmcrInitialize
| mclRunMain
| mclInitializeApplication
| mclTerminateApplication
| mclWaitForFiguresToDie