共有ライブラリのサポートの制限
MATLAB における C ライブラリ ルーチンのサポート
MATLAB® 共有ライブラリ インターフェイスでは、C ライブラリ ルーチンのみがサポートされます。複数の言語およびプラットフォームでの使用を前提に設計された製品仕様のライブラリであれば、ほぼすべて使用できます。詳細については、loadlibrary を使用して読み込まれた C ライブラリでの関数の呼び出しを参照してください。
多くの非商用ライブラリや、C++ からしかテストされていないライブラリは、インターフェイスが使用できなかったり、変更やインターフェイス層を必要とするものであったりします。この場合は MEX ファイルを使用することをお勧めします。
C++ ライブラリの読み込み
共有ライブラリ インターフェイスは C++ クラスやオーバーロードされた関数要素をサポートしていません。MATLAB C++ インターフェイスを代わりに使用します。詳細については、MATLAB からの C++ の呼び出しを参照してください。
関数 printf
の使用の制限
MATLAB では、C の関数 printf
の出力はコマンド ウィンドウに表示されません。
ビット フィールド
int
型または同等の型を使用して、ビット フィールド宣言を変更できます。たとえば、ライブラリのヘッダー ファイルで次のように宣言されているとします。
int myfunction(); struct mystructure { /* note the sum of fields bits */ unsigned field1 :4; unsigned field2 :4; };
ヘッダー ファイルを編集して次のように置き換えます。
int myfunction(); struct mystructure { /* field 8 bits wide to be manipulated in MATLAB */ /* A char is 8 bits on all supported platforms */ char allfields; };
ソース コードの編集後、ライブラリをリビルドします。こうして MATLAB でビット マスクを使用して、2 つのフィールドのデータにアクセスできます。
enum 宣言
enum
の char
定義はサポートされていません。C では、たとえば 'A'
という char
定数はそれに等価の数値 (65) に自動変換されます。MATLAB は定数を変換しません。この型の enum
を使用するには、ヘッダー ファイルを編集して 'A'
を数字 65 に置き換えます (int8('A') == 65
)。たとえば、
enum Enum1 {ValA='A',ValB='B'};
を次に置き換えます。
enum Enum1 {ValA=65,ValB=66};
そのうえで、ライブラリをリビルドします。
共用体の非サポート
共用体はサポートされていません。回避方法として、ソース コードを変更して union
の宣言を取り除き、代替となる最大のもので置き換えます。次に、結果を解釈するために、必要に応じて MATLAB コードを作成します。たとえば、ソース コードを編集して、次の共用体を
struct mystruct { union { struct {char byte1,byte2;}; short word; }; };
次に置き換えます。
struct mystruct { short word; };
リトルエンディアン ベースのマシンでは、byte1
は mod(f,256)
、byte2
は f/256
、そして word=byte2*256+byte1
となります。ソース コードの編集後、ライブラリをリビルドします。
コンパイラの依存関係
ヘッダー ファイルは、プラットフォームでサポートされているコンパイラとの互換性がなければなりません。サポートされているコンパイラの最新の一覧については、サポートされるコンパイラを参照してください。他のコンパイラに明示的に依存する外部ライブラリは読み込めません。
ポインターの使用制限
関数ポインター
共有ライブラリ インターフェイスは、関数ポインターと連動するライブラリ関数はサポートしません。
マルチレベル ポインター
マルチレベル ポインターとポインターを含む構造体はサポート制限があります。2 つを超える間接レベルで宣言された入出力および構造体メンバーの使用はサポートされていません。たとえば、double ***outp
から doublePtrPtrPtr
への変換はサポートされていません。
可変数の関数入力引数の指定は非サポート
共有ライブラリ インターフェイスでは、省略記号 (...
) で表される可変数の引数をもつライブラリ関数はサポートされていません。
関数の呼び出しに使用する引数のセットごとに 1 つのプロトタイプ ファイル内で複数のエイリアス関数を作成できます。詳細は、MATLAB プロトタイプ ファイルを参照してください。