このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
共有ライブラリインターフェイスはすべての標準スカラーのCの型をサポートしています。次の表はCの型とそれに対応するMATLAB®の型の一覧です。MATLABは、左の列に示された C の型をもつ引数について、右の列の型を使用します。
メモ
MATLABによって返されるスカラー値はすべて,双
型です。
MATLABプリミティブ型
Cの型 | 対応するMATLABの型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
无符号长 (窗口) |
|
无符号长 (Linux) |
|
|
|
|
|
|
|
|
文字ベクトルの细胞配列 |
次の表は,MATLABがCポインター(1列目)を対応するMATLAB関数シグネチャ(2列目)にマッピングする方法を示しています。通常,変数は”等価なMATLAB型”列から,対応する”引数データ型”をもつ関数に渡すことができます。lib.pointer
オブジェクトを代わりに使用する場合の詳細については,C関数内でのポインター引数を参照してください。
MATLABの拡張型
Cポインターの型 | 引数 データ型 |
等価な MATLAB型 |
共有ライブラリshrlibsample |
---|---|---|---|
|
|
双 |
addDoubleRef |
|
|
单 |
|
|
|
(u) int ( |
multiplyShort |
|
|
int8 |
|
|
|
|
stringToUpper |
|
|
文字ベクトルの细胞配列 |
|
枚举 |
|
||
|
|
|
allocateStruct |
|
|
deallocateStruct |
|
|
|
|
|
|
结构 |
MATLAB |
addStructFields |
|
|
MATLAB配列 |
|
|
|
|
MATLABの関数シグネチャに示された入出力引数について,いくつかの注意事項を以下に示します。
多くの引数(int32
や双
のような)はCのそれと似ています。こうした場合は,その引数に対して示されるMATLAB型のみを渡します。
一部のC引数(たとえば,* *的两倍
や定義済みの構造体)は標準のMATLABの型とは異なります。こうした場合は,標準のMATLAB型を渡してMATLABに変換させるか,あるいはMATLAB関数libstruct
およびlibpointer
を使用してデータを自分で変換します。詳細は,関数に渡されるデータの手動変換を参照してください。
C関数はしばしば,参照によって渡される入力引数のデータを返します。MATLABでは、これらの値を返すための追加の出力引数が作成されます。Ptr
またはPtrPtr
で終わる入力引数は,出力引数としてもリストされています。
MATLAB関数シグネチャの例は,共有ライブラリshrlibsampleを参照してください。
ライブラリ関数では,非スカラー引数は参照により渡されることを宣言しなければなりません。
ライブラリ関数が単一の添字インデックスを使用して2次元行列を参照する場合,Cプログラムは行列を行ごとに処理することに注意してください。MATLABは行列を列ごとに処理します。関数から C の動作を取得するには、関数を呼び出す前に入力行列を転置し、その後関数出力を転置します。
空の配列[]
を使用して,オプションの入力引数をサポートしているライブラリ関数に零
パラメーターを渡します。この表記は,libfunctions
やlibfunctionsview
によって示されるように,Ptr
またはPtrPtr
として引数が宣言される場合にのみ有効です。
ライブラリ関数に渡す零
ポインターは以下の方法により作成できます。
引数として空配列[]
を渡します。
関数libpointer
を使用します。
p = libpointer;%没有参数
P = libpointer('string') % string参数
P = libpointer('cstring') %指向字符串参数的指针
関数libstruct
を使用します。
p = libstruct(“structtype”);%结构类型
libstruct
オブジェクト空のlibstruct
オブジェクトを作成するには,libstruct
をstructtype
引数のみで呼び出します。以下に例を示します。
sci = libstruct (“c_struct”) (sci)
P1: 0 p2: 0 p3: 0
MATLABに初期化された値が表示されます。
ほとんどの場合,MATLABソフトウェアは,外部ライブラリ関数との間で受け渡しされるデータを,外部関数で想定されるデータ型に自動的に変換します。しかし,引数データの手動による変換も選択できます。以下に例を示します。
同じデータを一連のライブラリ関数に渡す場合,呼び出しのたびにMATLABでデータを自動変換する代わりに,最初の関数の呼び出し前に手動で一度変換します。この手法より,不要なコピーおよび変換操作の数が削減されます。
大規模な構造体を渡す場合,汎用のMATLAB構造体を使用する代わりに関数で使用されるC構造体の形状と一致するMATLAB構造体を作成することで,メモリを節約します。関数libstruct
は,ライブラリから取得したC構造体をモデルとしたMATLAB構造体を作成します。
外部関数に対する引数で複数のレベルの参照が使用される場合(双* *
など),MATLABによる型の自動変換に頼らず,関数libpointer
を使用して作成したポインターを渡します。
libstruct
|libpointer
|libfunctions
|libfunctionsview