Main Content

ヘッダー専用の HPP ファイル

この例では、school という名前の C++ ライブラリに対する MATLAB® インターフェイスを作成します。ライブラリはヘッダー ファイルで定義され、コンパイル済みライブラリ ファイルはありません。ヘッダー ファイルによりすべてが定義されたライブラリは、"ヘッダー専用" ライブラリと呼ばれます。

ライブラリ アーティファクトMATLAB インターフェイス libnameMATLAB ヘルプ

ヘッダー ファイル school.hpp

clib.school (既定の名前)

>> doc clib.school

このライブラリは、学生と教師を表すクラスを定義します。このライブラリをパブリッシュした後、MATLAB ユーザーは clib.school 名前空間内の関数を呼び出し、Student オブジェクトと Teacher オブジェクトを作成して、名前と年齢を指定できます。

MATLAB には、この例で使用するヘッダー ファイルが次のフォルダーに用意されています。

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

このライブラリ用の school という名前のインターフェイスを作成するには、ワークフロー スクリプト内の各手順 (ライブラリ定義ファイルの生成、不足している構成要素の定義、インターフェイスのビルド、インターフェイスのテスト) に従います。パブリッシュ プロセスを反復する必要がある場合は、追加の手順を実行してパラメーターを復元し、アウトプロセス実行モードを有効にすることができます。その後、パブリッシュされたインターフェイスを他のユーザーに共有できます。

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

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

メモ

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

手順 1: 生成

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

ファイルの選択

ライブラリは school.hpp ヘッダー ファイルで定義されます。[ライブラリ タイプ]Header-only に設定します。

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

ヘッダー ファイルを選択するには、[参照] をクリックしてファイル school.hpp を開きます。

ヘッダー ファイルは他のヘッダー ファイルに依存していないため、[ライブラリにインクルード パスが不要] チェック ボックスを選択します。

構成の選択

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

既定では、[インターフェイス ライブラリ名]school です。この名前を clib で使用して、MATLAB の機能を呼び出します。

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

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

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

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

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

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

結果の表示

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

定義ファイルの生成

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

手順 2: 定義

ライブラリ定義ファイルを作成したときに、1 つの構成要素の定義が完全でないと MATLAB から報告されました。機能を完全に定義するには、defineschool.m ファイルを編集します。ファイルを編集するには、[DEFINE] セクションを実行します。

情報が不足している構成要素はコメント アウトされます。ファイルをスクロールして [C++ function getName with MATLAB name clib.school.getName] というタイトルのセクションを見つけます。getName コード セクションでステートメントのコメントを解除します。

入力引数 p は、スカラー値です。このステートメントの <SHAPE> を数値 1 に置き換えます。

defineArgument(getNameDefinition, "p", "clib.school.Person", "input", <SHAPE>);
defineArgument(getNameDefinition, "p", "clib.school.Person", "input", 1);

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

ファイルで行った編集を検証するには、[Confirm edits and run summary] セクションを実行します。報告されたエラーをファイルで修正します。

関数 summary では、以下のように表示されます。

MATLAB Interface to school Library

Class clib.school.Person

  Constructors:
    clib.school.Person()
    clib.school.Person(string,uint64)
    clib.school.Person(clib.school.Person)

  Methods:
    setName(string)
    setAge(uint64)
    string getName()
    uint64 getAge()

  No Properties defined

Class clib.school.Teacher

  Constructors:
    clib.school.Teacher()
    clib.school.Teacher(string,uint64)
    clib.school.Teacher(clib.school.Teacher)

  Methods:
    string getName()

  No Properties defined

Class clib.school.Student

  Constructors:
    clib.school.Student()
    clib.school.Student(string,uint64)
    clib.school.Student(clib.school.Student)

  Methods:
    string getName()

  No Properties defined

Functions
  string clib.school.getName(clib.school.Person)

手順 3: ビルド

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

Building interface file 'schoolInterface.dll' for clib interface 'school'.
Interface file 'schoolInterface.dll' built in folder 'C:\Users\Documents\MATLAB\school'.

To use the library, add the interface file folder to the MATLAB path.
addpath('C:\Users\Documents\MATLAB\school')

メモ

生成、定義、ビルドの手順は繰り返し実行できます。ただし、ライブラリのヘルプを表示するか関数を呼び出した後は、同じ MATLAB セッションで defineschool 定義ファイルを更新することはできなくなります。MATLAB を再起動するか、[構成の選択] セクションの [インターフェイス ライブラリ名] パラメーターを変更して新しい定義ファイルを作成します。

手順 4: テスト

実行時ライブラリの設定およびコピー

[Set up and copy run-time libraries] セクションを実行します。このライブラリには追加の実行時の依存関係はないため、コマンドを変更する必要はありません。

インターフェイス ライブラリのヘルプの呼び出し

インターフェイス ライブラリのヘルプを表示するには、[Call help on interface library] セクションを実行します。

インターフェイス ライブラリを呼び出してテストするコードの記述

[Write code to call and test interface library] のコード セクションを使用して、以下のテストを記述します。

t1 = clib.school.Teacher('Ms. Jones',24);
getName(t1)
ans = "Ms. Jones"

インターフェイスの共有

インターフェイスを別の MATLAB ユーザーに共有するには、ツールボックス インストール (.mltbx) ファイルを作成します。Distribute MATLAB Interface to C++ Libraryの手順を使用して以下を実行します。

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

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

関連するトピック