Main Content

C++ コンパイル済みライブラリの関数の呼び出し

C++ ライブラリに対する MATLAB® インターフェイスのパブリッシャーから、インターフェイス ファイルと必要な場合は依存ライブラリ ファイルをインストールするように指示されます。パブリッシャーから依存ライブラリ ファイルが提供されるか、外部ソースからライブラリをインストールするように指示されるか、すべての関連ファイルへのリンクが提供されます。パブリッシャーが MATLAB アドオン を使用してツールボックスを作成した場合、この情報は、[アドオン マネージャー] のツールボックスの [オプション] メニューから表示できる入門ガイドで参照できます。詳細な情報が必要な場合や、入門ガイドが見つからない場合は、パブリッシャーにお問い合わせください。アドオンの詳細については、アドオンの管理を参照してください。

ライブラリ libname のインターフェイス ファイルの名前は libnameInterface.ext です。ext はプラットフォーム固有であり、Windows® では .dll、Linux® では .somacOS では .dylib です。

ランタイム パスの設定

MATLAB で検索されるのは、インターフェイス ファイルについては MATLAB パス、依存ライブラリ ファイルについてはシステム パスまたはランタイム検索パス (rpath) です。パブリッシャーから依存ライブラリ ファイルが提供された場合は、それらをインターフェイス ファイルと同じフォルダーに配置できます。あるいは、それらをシステム パスに追加するには、C++ インターフェイス用のランタイム ライブラリ パスの設定を参照してください。依存ライブラリの配置の詳細については、Missing or Incorrectly Installed Run-Time Librariesを参照してください。

MATLAB パスの設定

インターフェイス ファイルを含むフォルダーで addpath を呼び出します。

ヘルプの表示

MATLAB の関数 help と関数 doc は、ライブラリのメンバーについてのヘルプを提供します。たとえば、ライブラリ libname 内の関数 funcname のヘルプを表示するには、次のように入力します。

help clib.libname.funcname

関数の呼び出し

入力引数 arg1,arg2,... と出力引数 retVal を使用して C++ ライブラリ libname の関数 funcname を呼び出すには、MATLAB clib パッケージを使用します。以下を入力すると、MATLAB は自動的にライブラリを読み込みます。

retVal = clib.libname.funcname(arg1,arg2,...)

MATLAB がライブラリを読み込んだ後、タブ補完を使用して clib パッケージのメンバーを表示できます。

MATLAB 型の C++ 型へのマッピング

MATLAB データを引数として C++ のメソッドまたは関数に渡すと、MATLAB はそのデータを C++ 言語に対してデータを最も適切に表す型に変換します。

下表の各行は MATLAB の型の後に、一致する可能性のある C++ 引数を、一致度の高い順に左から右に示します。MATLAB の型 (cell 配列を除く) はスカラー (1 行 1 列) 配列または行列です。C++ の型は、スカラー値または配列です。"cpparray" というフレーズは、次の C++ 配列型を指します。

  • ボックス配列 ([])

  • 配列バッファー (*)

  • std::vector

MATLAB 引数 (スカラーまたは配列)

C++ のパラメーターの型 (スカラーまたは配列)
オブジェクト以外の型

最も一致度の高い型 <———————————————————————> 最も一致度の低い型

logical

bool
cpparray bool

int8_t
cpparray int8_t
uint8_t
cpparray uint8_t

int16_t
cpparray int16_t
uint16_t
cpparray uint16_t

int32_t
cpparray int32_t
uint32_t
cpparray uint32_t

int64_t
cpparray int64_t
uint64_t
cpparray uint64_t

float
cpparray float

double
cpparray double

double

double
cpparray double

float
cpparray float

int64_t
cpparray int64_t
uint64_t
cpparray uint64_t

int32_t
cpparray int32_t
uint32_t
cpparray uint32_t

int16_t
cpparray int16_t
uint16_t
cpparray uint16_t

int8_t
cpparray int8_t
uint8_t
cpparray uint8_t

std::complex<double>
cpparray std::complex<double>
std::complex<float>
cpparray std::complex<float>
std::complex<int64_t>
cpparray std::complex<int64_t>
std::complex<uint64_t>
cpparray std::complex<uint64_t>
std::complex<int32_t>
cpparray std::complex<int32_t>
std::complex<uint32_t>
cpparray std::complex<uint32_t>
std::complex<int16_t>
cpparray std::complex<int16_t>
std::complex<uint16_t>
cpparray std::complex<uint16_t>
std::complex<int8_t>
cpparray std::complex<int8_t>
std::complex<uint8_t>
cpparray std::complex<uint8_t>

single

float
cpparray float

double
cpparray double

std::complex<float>
cpparray std::complex<float>

std::complex<double>
cpparray std::complex<double>

   

[u]int8

[u]int8_t
cpparray [u]int8_t

[u]int16_t
cpparray [u]int16_t

[u]int32_t
cpparray [u]int32_t

[u]int64_t
cpparray [u]int64_t

float
cpparray float

double
cpparray double

std::complex<[u]int8_t>
cpparray std::complex<[u]int8_t>
std::complex<[u]int16_t>
cpparray std::complex<[u]int16_t>
std::complex<[u]int32_t>
cpparray std::complex<[u]int32_t>
std::complex<[u]int64_t>
cpparray std::complex<[u]int64_t>
std::complex<float>
cpparray std::complex<float>
std::complex<double>
cpparray std::complex<double>

[u]int16

[u]int16_t
cpparray [u]int16_t

[u]int32_t
cpparray [u]int32_t

[u]int64_t
cpparray [u]int64_t

float
cpparray float

double
cpparray double

std::complex<[u]int16_t>
cpparray std::complex<[u]int16_t>
std::complex<[u]int32_t>
cpparray std::complex<[u]int32_t>
std::complex<[u]int64_t>
cpparray std::complex<[u]int64_t>
std::complex<float>
cpparray std::complex<float>
std::complex<double>
cpparray std::complex<double>

 

[u]int32

[u]int32_t
cpparray [u]int32_t

[u]int64_t
cpparray [u]int64_t

float
cpparray float

double
cpparray double

std::complex<[u]int32_t>
cpparray std::complex<[u]int32_t>
std::complex<[u]int64_t>
cpparray std::complex<[u]int64_t>
std::complex<float>
cpparray std::complex<float>
std::complex<double>
cpparray std::complex<double>

  

[u]int64

[u]int64_t
cpparray [u]int64_t

float
cpparray float

double
cpparray double

std::complex<[u]int64_t>
cpparray std::complex<[u]int64_t>
std::complex<float>
cpparray std::complex<float>
std::complex<double>
cpparray std::complex<double>

   

複素数の double

std::complex<double>
cpparray std::complex<double>

std::complex<float>
cpparray std::complex<float>

std::complex<int64_t>
cpparray std::complex<int64_t>
std::complex<uint64_t>
cpparray std::complex<uint64_t>

std::complex<int32_t>
cpparray std::complex<int32_t>
std::complex<uint32_t>
cpparray std::complex<uint32_t>

std::complex<int16_t>
cpparray std::complex<int16_t>
std::complex<uint16_t>
cpparray std::complex<uint16_t>

std::complex<int8_t>
cpparray std::complex<int8_t>
std::complex<uint8_t>
cpparray std::complex<uint8_t>

 

複素数の single

std::complex<float>
cpparray std::complex<float>

std::complex<double>
cpparray std::complex<double>

     

複素数の [u]int8

std::complex<[u]int8_t>
cpparray std::complex<[u]int8_t>

std::complex<[u]int16_t>
cpparray std::complex<[u]int16_t>

std::complex<[u]int32_t>
cpparray std::complex<[u]int32_t>

std::complex<[u]int64_t>
cpparray std::complex<[u]int64_t>

std::complex<float>
cpparray std::complex<float>

std::complex<double>
cpparray std::complex<double>

 

複素数の [u]int16

std::complex<[u]int16_t>
cpparray std::complex<[u]int16_t>

std::complex<[u]int32_t>
cpparray std::complex<[u]int32_t>

std::complex<[u]int64_t>
cpparray std::complex<[u]int64_t>

std::complex<float>
cpparray std::complex<float>

std::complex<double>
cpparray std::complex<double>

  

複素数の [u]int32

std::complex<[u]int32_t>
cpparray std::complex<[u]int32_t>

std::complex<[u]int64_t>
cpparray std::complex<[u]int64_t>

std::complex<float>
cpparray std::complex<float>

std::complex<double>
cpparray std::complex<double>

   

複素数の [u]int64

std::complex<[u]int64_t>
cpparray std::complex<[u]int64_t>

std::complex<double>
cpparray std::complex<double>

     

char

cpparray char
char16_t
cpparray char16_t
char32_tcpparray char32_t

wchar_t
cpparray wchar_t

std::string
std::wstring
std::u16string
std::u32string

     

string 配列
文字ベクトルの cell 配列
文字列引数の受け渡しを参照してください。

std::vector<std::string>
std::vector<std::wstring>
std::vector<std::u16string>
std::vector<std::u32string>

char * []

     

C++ の MyClass 型の MATLAB オブジェクト

MyClass 型の C++ オブジェクト

      

MATLAB クラスの MATLAB オブジェクト

対応なし

      

既定の引数を使用した関数の呼び出し

C++ 関数が既定の引数で定義されている場合は、1 つ以上の後続の引数を指定することなく関数を呼び出すことができます。関数のヘルプで既定値が示されます。たとえば、arg の型が double で、その既定値が 100 の場合は、ヘルプでは以下のように表示されます。

clib.libname.funcname(arg)
    Input Arguments
      arg             double = 100

以下のステートメントでは、同じ結果が生成されます。

clib.libname.funcname
clib.libname.funcname(100)

以下のステートメントも正しいですが、結果が異なる場合があります。

clib.libname.funcname(99)

MATLAB では、スカラー整数型および浮動小数点型で既定の引数がサポートされます。

アクセス違反エラー

ライブラリを呼び出すときは、ライブラリがデバッグ モードではなくリリース モードでコンパイルされていることを確認してください。その他の一般的な問題に関するヘルプについては、Troubleshooting MATLAB Interface to C++ Library Issuesを参照してください。

関連するトピック