Windows でのヘッダー ファイルおよび C++ コンパイル済みライブラリ ファイル
この例では、clibPublishInterfaceWorkflow を呼び出すことで Windows® 用の C++ ライブラリに対する MATLAB® インターフェイスを作成する方法について説明します。たとえば、ライブラリはヘッダー ファイル matrixOperations.hpp およびインポート ライブラリ ファイル matrixOperations.lib で定義されます。MATLAB では以下のフォルダーにライブラリ ファイルが用意されています。
fullfile(matlabroot,"extern","examples","cpp_interface")
この例では、フォルダーは以下のとおりです。
ans =
"C:\Program Files\MATLAB\R2023a\extern\examples\cpp_interface"このライブラリ用の matrixlib という名前のインターフェイスを作成するには、ワークフロー スクリプト内の各手順 (ライブラリ定義ファイルの生成、不足している構成要素の定義、インターフェイスのビルド、インターフェイスのテスト) に従います。パブリッシュ プロセスを反復する必要がある場合は、追加の手順を実行してパラメーターを復元し、アウトプロセス実行モードを有効にすることができます。その後、パブリッシュされたインターフェイスを他のユーザーに共有できます。
ワークフロー スクリプトの作成
書き込み可能なフォルダーに移動し、clibPublishInterfaceWorkflow を呼び出します。ダイアログ ボックスで、ワークフロー スクリプトの名前 (たとえば、publishmatrixlib.mlx) を指定します。ワークフロー スクリプトには、インターフェイスをパブリッシュできるようにする手順があります。このスクリプトを使用して、インターフェイスをパブリッシュするためのパラメーターを保存します。すべてのプラットフォームで同じスクリプトを使用できます。
メモ
ワークフロー スクリプトにより、複数の MATLAB セッションでインターフェイスを繰り返し生成、定義、ビルド、およびテストできます。ただし、[既存の定義ファイルを上書き] オプションを使用して再作成されたライブラリ定義ファイルへの編集はスクリプトでは保存されません。
手順 1: 生成
まず、ライブラリ定義ファイルを生成します。ワークフロー スクリプトには、この手順用の [C++ インターフェイスの生成] ライブ エディター タスクが含まれています。このタスクを使用して、ライブラリを構成するファイルを選択し、ライブラリ定義ファイルを生成するためのオプションを設定します。
ファイルの選択
ライブラリは matrixOperations.hpp ヘッダー ファイルおよび Windows matrixOperations.lib ライブラリ ファイルで定義されます。[ライブラリ タイプ] は Headers and compiled library files であり、これは既定の設定です。
[ライブラリの起動パス] を設定するには、フォルダー fullfile(matlabroot,"extern","examples","cpp_interface") を参照し、[フォルダーの選択] をクリックします。
ヘッダー ファイルを選択するには、[参照] をクリックしてファイル matrixOperations.hpp を開きます。
ヘッダー ファイルは、cppshrhelp.hpp ヘッダー ファイルに依存しています。[ライブラリの起動パス] のフォルダーに移動し、[フォルダーの選択] をクリックします。
コンパイル済みライブラリ ファイルを選択するには、win64\mingw64 フォルダーを参照し、matrixOperations.lib ファイルを開きます。
構成の選択
この例では、[C++ コンパイラ] は MinGW64 Compiler (C++) に設定されています。
[インターフェイス ライブラリ名] を matrixlib に変更します。この名前を clib で使用して、MATLAB の機能を呼び出します。たとえば、ライブラリ オブジェクト Mat を作成するには、コマンド プロンプトから以下を入力します。
clib.matrixlib.Mat
[出力フォルダー] が書き込み可能なフォルダーであることを確認します。
[既存の定義ファイルを上書き] チェック ボックスを選択し、インターフェイスの開発中に定義ファイルを再作成できるようにします。
オプションの C++ ライブラリ設定の指定
このライブラリへのインターフェイスのビルドには、オプションの C++ ライブラリ設定は不要です。
オプションの定義構成の指定
このライブラリへのインターフェイスのビルドには、オプションの定義構成は不要です。
結果の表示
既定では、定義ファイルを生成すると、関数により、使用可能な構成要素 (ライブラリ内のクラスおよび関数) が表示されます。インターフェイスの開発中に、[使用できない構成要素の表示] チェック ボックスを選択しておくと、サポートされていないため対象外となる構成要素も確認できます。
定義ファイルの生成
[定義ファイルの生成] をクリックします。スクリプトにより、進行状況が表示され、指定した出力フォルダーにライブラリ定義ファイル definematrixlib.m が作成されます。
C++ compiler set to 'MinGW64 Compiler (C++)'. Definition file definematrixlib.m contains definitions for 10 constructs supported by MATLAB. - 5 constructs are fully defined. - 5 constructs partially defined and commented out. To include the 5 undefined constructs in the interface, uncomment and complete the definitions in definematrixlib.m. To build the interface, call build(definematrixlib).
MATLAB Interface to matrixlib Library
Class clib.matrixlib.Mat
Constructors:
clib.matrixlib.Mat(clib.matrixlib.Mat)
clib.matrixlib.Mat()
Methods:
uint64 getLength()
No Properties defined
Functions
clib.matrixlib.updateMatByX(clib.matrixlib.Mat,int32)
複数のセッションをまたいだ開発用ツールの有効化
インターフェイスのパブリッシュ中は、手順を繰り返したり、publishmatrixlib.mlx スクリプトを閉じてから再び開いたり、MATLAB を再起動したりすることができます。以下のセクションの手順に従うと、該当するワークフローで役立ちます。
MATLAB セッション間でワークスペース変数を保持します。[Restore library definition] セクションで、変数
outputFolderPathを [出力フォルダー] パラメーターの値に設定します。変数libraryNameForInterfaceを [インターフェイス ライブラリ名] パラメーターmatrixlibに設定します。次に、セクションを実行します。詳細については、Restore Library Definitionを参照してください。[Enable out-of-process execution mode] セクションの実行を検討します。インターフェイスの開発時にこのモードを使用すると、テスト中に MATLAB を再起動する必要がなくなります。ライブラリ内の機能を呼び出した後に、[Unload out-of-process library] セクションを実行してライブラリをアンロードできます。詳細については、アウトプロセスの C++ ライブラリの読み込みを参照してください。
手順 2: 定義
ライブラリ定義ファイルを作成したときに、5 つの構成要素について、それらの定義が完全でないと MATLAB から報告されました。機能を完全に定義するには、definematrixlib.m ファイルを編集します。ファイルを編集するには、[DEFINE] セクションを実行します。
ライブラリ定義ファイルをスクロールし、それらの構成要素についてのコメント化されたコードのブロックを探します。MATLAB では、以下の関数で使用される引数のサイズを自動的に判別できません。
setMat— クラスMatの C++ メソッドgetMat— クラスMatの C++ メソッドcopyMat— クラスMatの C++ メソッドaddMat— C++ 関数updateMatBySize— C++ 関数
matrixOperations ライブラリのドキュメンテーションに基づいて、引数の定義ステートメントで <SHAPE> の値を指定できます。詳細については、Define Missing SHAPE Parameterを参照してください。
それぞれの構成要素について、定義ステートメントのコメントを解除します。
<SHAPE>の引数を次の値に置き換えます。構成要素
引数の名前
引数の C++ 定義
説明
<SHAPE>と置き換える値setMatsrcint [] src行列の長さを入力引数
lenで定義します。"len"getMatRetValint const *出力引数の長さを入力引数
lenで定義します。"len"copyMatdestint * dest長さ
destを入力引数lenで定義します。"len"addMatmatMat const * mat関数で単一の
mat引数を受け取ります。1updateMatBySizearrint * arr長さ
arrを入力引数lenで定義します。"len"定義ファイルを保存して閉じます。
ファイルで行った編集を検証するには、[Confirm edits and run summary] セクションを実行します。報告されたエラーをファイルで修正します。関数
summaryにより、インターフェイスにsetMat、getMat、copyMat、addMat、およびupdateMatBySizeが含まれるようになっていることが示されます。
MATLAB Interface to matrixlib Library
Class clib.matrixlib.Mat
Constructors:
clib.matrixlib.Mat(clib.matrixlib.Mat)
clib.matrixlib.Mat()
Methods:
setMat(clib.array.matrixlib.Int)
clib.array.matrixlib.Int getMat(uint64)
uint64 getLength()
copyMat(clib.array.matrixlib.Int)
No Properties defined
Functions
int32 clib.matrixlib.addMat(clib.matrixlib.Mat)
clib.matrixlib.updateMatByX(clib.matrixlib.Mat,int32)
clib.matrixlib.updateMatBySize(clib.matrixlib.Mat,clib.array.matrixlib.Int)手順 3: ビルド
ライブラリに対する matrixlib インターフェイスをビルドするには、スクリプトの [BUILD] セクションを実行します。
Building interface file 'matrixlibInterface.dll' for clib interface 'matrixlib'.
Interface file 'matrixlibInterface.dll' built in folder 'C:\Users\Documents\MATLAB\matrixlib'.
To use the library, add the interface file folder to the MATLAB path.
addpath('C:\Users\Documents\MATLAB\matrixlib')メモ
生成、定義、ビルドの手順は繰り返し実行できます。ただし、ライブラリのヘルプを表示するか関数を呼び出した後は、同じ MATLAB セッションで definematrixlib 定義ファイルを更新することはできなくなります。MATLAB を再起動するか、[構成の選択] セクションの [インターフェイス ライブラリ名] パラメーターを変更して新しい定義ファイルを作成します。
手順 4: テスト
実行時ライブラリの設定およびコピー
[Set up and copy run-time libraries] セクションを実行します。このライブラリには追加の実行時の依存関係はないため、コマンドを変更する必要はありません。
アウトプロセス実行モードの有効化
定義ファイルを変更する必要がある場合は、このコマンドを実行して、アウトプロセスでインターフェイス ライブラリを呼び出す機能を設定し、MATLAB を再起動しなくて済むようにします。詳細については、インプロセスまたはアウトプロセスでの C++ ライブラリの読み込みを参照してください。
インターフェイス ライブラリのヘルプの呼び出し
インターフェイス ライブラリのヘルプを表示するには、[Call help on interface library] セクションを実行します。
インターフェイス ライブラリを呼び出してテストするコードの記述
[Write code to call and test interface library] のコード セクションを使用して、以下のテストを記述します。
matObj = clib.matrixlib.Mat; % Create a Mat object intArr = [1,2,3,4,5]; matObj.setMat(intArr); % Set the values to intArr retMat = matObj.getMat(5) % Display the values
retMat =
read-only clib.array.matrixlib.Int with properties:
Dimensions: 5
Resizable: 0
インターフェイスの共有
インターフェイスを別の MATLAB ユーザーに共有するには、ツールボックス インストール (.mltbx) ファイルを作成します。Distribute MATLAB Interface to C++ Libraryの手順を使用して以下を実行します。
ツールボックス フォルダーを、インターフェイス ファイル
matrixlibInterface.dllが含まれているmatrixlibフォルダーに設定します。同じフォルダー内に、コンパイル済みライブラリ ファイル
matrixOperations.dllを配置します。名前空間 (呼び出し構文) を
clib.matrixlibとして識別します。