Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

ヘッダーと C++ のソース ファイル

この例では、clibPublishInterfaceWorkflow を呼び出すことで、ヘッダー ファイル matrixOperations.hpp で宣言され、C++ ソース ファイル matrixOperations.cpp で定義された C++ ライブラリに対する MATLAB® インターフェイスを作成する方法について説明します。

MATLAB には、次のフォルダーにこれらのソース ファイルが用意されています。

fullfile(matlabroot,"extern","examples","cpp_interface")

この例では、フォルダーは以下のとおりです。

ans = 

    "C:\Program Files\MATLAB\R2023a\extern\examples\cpp_interface"

ワークフロー スクリプトの作成

書き込み可能なフォルダー (たとえば、C:\work\publish) に移動し、clibPublishInterfaceWorkflow を呼び出します。ダイアログ ボックスで、ワークフロー スクリプトの名前 (たとえば、publishmatrixlib.mlx) を指定します。ワークフロー スクリプトには、インターフェイスをパブリッシュできるようにする手順があります。このスクリプトを使用して、インターフェイスをパブリッシュするためのパラメーターを保存します。すべてのプラットフォームで同じスクリプトを使用できます。

メモ

ワークフロー スクリプトにより、複数の MATLAB セッションでインターフェイスを繰り返し生成、定義、ビルド、およびテストできます。ただし、[既存の定義ファイルを上書き] オプションを使用して再作成されたライブラリ定義ファイルへの編集はスクリプトでは保存されません。

手順 1: 生成

まず、ライブラリ定義ファイルを生成します。ワークフロー スクリプトには、この手順用の [C++ インターフェイスの生成] ライブ エディター タスクが含まれています。このタスクを使用して、ライブラリを構成するファイルを選択し、ライブラリ定義ファイルを生成するためのオプションを設定します。

ファイルの選択

ライブラリは matrixOperations.hpp ヘッダー ファイルおよび Windows® matrixOperations.cpp ソース ファイルで定義されます。[ライブラリ タイプ] として Headers and source files を選択します。

[ライブラリの起動パス] を設定するには、フォルダー fullfile(matlabroot,"extern","examples","cpp_interface") を参照し、[フォルダーの選択] をクリックします。

ヘッダー ファイルを選択するには、参照ボタンを使用して matrixOperations.hpp ファイルを開きます。

ヘッダー ファイルは、cppshrhelp.hpp ヘッダー ファイルに依存しています。[ライブラリの起動パス] のフォルダーに移動し、[フォルダーの選択] をクリックします。

サポート ソース ファイルを選択するには、参照ボタンを使用して matrixOperations.cpp ファイルを開きます。

構成の選択

この例では、[C++ コンパイラ]MinGW64 Compiler (C++) に設定されています。

既定の [インターフェイス ライブラリ名]matrixOperations です。この名前を clib で使用して、MATLAB の機能を呼び出します。たとえば、ライブラリ オブジェクト Mat を作成するには、コマンド プロンプトから以下を入力します。

clib.matrixOperations.Mat

[出力フォルダー] が書き込み可能なフォルダーであることを確認します。

[既存の定義ファイルを上書き] チェック ボックスを選択し、インターフェイスの開発中に定義ファイルを再作成できるようにします。

オプションの C++ ライブラリ設定の指定

[.h ファイルを C ヘッダー ファイルとして扱う] パラメーターを選択します。

オプションの定義構成の指定

このライブラリへのインターフェイスのビルドには、オプションの定義構成は不要です。

結果の表示

既定では、定義ファイルを生成すると、関数により、使用可能な構成要素 (ライブラリ内のクラスおよび関数) が表示されます。インターフェイスの開発中は、[使用できない構造の表示] チェック ボックスも選択すると、含めるために追加情報を必要とする可能性のある構成要素を確認できます。

定義ファイルの生成

[定義ファイルの生成] をクリックします。スクリプトにより、進行状況が表示され、指定した出力フォルダーにライブラリ定義ファイル definematrixOperations.m が作成されます。

C++ compiler set to 'MinGW64 Compiler (C++)'.
Definition file definematrixOperations.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 definematrixOperations.m.
To build the interface, call build(definematrixOperations).
MATLAB Interface to matrixOperations Library

Class clib.matrixOperations.Mat

  Constructors:
    clib.matrixOperations.Mat(clib.matrixOperations.Mat)
    clib.matrixOperations.Mat()

  Methods:
    uint64 getLength()

  No Properties defined

Functions
clib.matrixOperations.updateMatByX(clib.matrixOperations.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を参照してください。

  1. それぞれの構成要素について、定義ステートメントのコメントを解除します。

  2. <SHAPE> の引数を次の値に置き換えます。

    構成要素

    引数の名前

    引数の C++ 定義

    説明

    <SHAPE> と置き換える値

    setMatsrcint [] src

    行列の長さを入力引数 len で定義します。

    "len"
    getMatRetValint const *

    出力引数の長さを入力引数 len で定義します。

    "len"
    copyMatdestint * dest

    長さ dest を入力引数 len で定義します。

    "len"
    addMatmatMat const * mat

    関数で単一の mat 引数を受け取ります。

    1
    updateMatBySizearrint * arr

    長さ arr を入力引数 len で定義します。

    "len"
  3. 定義ファイルを保存して閉じます。

  4. ファイルで行った編集を検証するには、[Confirm edits and run summary] セクションを実行します。報告されたエラーをファイルで修正します。関数 summary により、インターフェイスに setMatgetMatcopyMataddMat、および updateMatBySize が含まれるようになっていることが示されます。

MATLAB Interface to matrixOperations Library

Class clib.matrixOperations.Mat

  Constructors:
    clib.matrixOperations.Mat(clib.matrixOperations.Mat)
    clib.matrixOperations.Mat()

  Methods:
    setMat(clib.array.matrixOperations.Int)
    clib.array.matrixOperations.Int getMat(uint64)
    uint64 getLength()
    copyMat(clib.array.matrixOperations.Int)

  No Properties defined

Functions
int32 clib.matrixOperations.addMat(clib.matrixOperations.Mat)
clib.matrixOperations.updateMatByX(clib.matrixOperations.Mat,int32)
clib.matrixOperations.updateMatBySize(clib.matrixOperations.Mat,clib.array.matrixOperations.Int)

手順 3: ビルド

ライブラリに対する matrixOperations インターフェイスをビルドするには、スクリプトの [BUILD] セクションを実行します。

メモ

生成、定義、ビルドの手順は繰り返し実行できます。ただし、ライブラリのヘルプを表示するか関数を呼び出した後は、同じ 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の手順を使用して以下を実行します。

  • ツールボックス フォルダーを、インターフェイス ファイル matrixOperationsInterface.dll が含まれている matrixOperations フォルダーに設定します。

  • 同じフォルダー内に、コンパイル済みライブラリ ファイル matrixOperations.dll を配置します。

  • 名前空間 (呼び出し構文) を clib.matrixOperations として識別します。

参考

関連するトピック