Main Content

データ変換ルール

このトピックでは、MATLAB® Compiler™ のコンポーネントのデータ変換ルールを説明します。これらのコンポーネントは Automation と互換性のあるデータ型をサポートするデュアル インターフェイス Microsoft® COM オブジェクトです。

メモ

"Automation" (以前は OLE Automation と呼ばれた) はソフトウェア パッケージが固有の機能をスクリプト ツールやその他のアプリケーションに公開できるようにするテクノロジーです。Automation はコンポーネント オブジェクト モデル (COM) を使用しますが、インプレース アクティベーションなど他の OLE 機能とは独立して実装される場合があります。

MATLAB Compiler のコンポーネントでメソッドが呼び出されると、入力パラメーターは MATLAB 内部の配列形式に変換され、コンパイルされた MATLAB 関数に渡されます。関数が終了すると、出力パラメーターは MATLAB 内部の配列形式から COM オートメーション型に変換されます。

COM クライアントはコンパイルされた MATLAB 関数内のすべての入力引数と出力引数を VARIANT 型として渡します。COM VARIANT 型は複数の単純データ型の共用体です。VARIANT 型変数は、任意の単純型の変数およびそれら任意の値の配列を格納することができます。

Win32 アプリケーション プログラム インターフェイス (API) は C/C++ で VARIANT を作成し操作する関数を多数提供し、Visual Basic® はこの型のネイティブ言語サポートを提供します。

メモ

このデータの説明は VARIANT データ型と Variant データ型の両方に該当します。VARIANT は C++ での名前であり、Variant は Visual Basic での対応するデータ型です。

COM VARIANT の定義と API サポートについては、Visual Studio® ドキュメンテーションを参照してください。VARIANT 変数は自己記述型で、その型のコードを構造体の内部フィールドとして格納します。

以下の表は、MATLAB Compiler のコンポーネントによってサポートされている VARIANT 型コードをリストしています。

サポートされる VARIANT 型コード

VARIANT 型コード
(C/C++)
C/C++ の型Variant 型コード
(Visual Basic)
Visual Basic の型定義
VT_EMPTYvbEmpty

初期化されていない VARIANT

VT_I1char

符号付き 1 バイト文字

VT_UI1

符号なし char

vbByteByte

符号なし 1 バイト文字

VT_I2shortvbIntegerInteger

符号付き 2 バイト整数

VT_UI2unsigned short

符号なし 2 バイト整数

VT_I4longvbLongLong

符号付き 4 バイト整数

VT_UI4unsigned long

符号なし 4 バイト整数

VT_R4floatvbSingleSingle

IEEE® 4 バイト浮動小数点値

VT_R8doublevbDoubleDouble

IEEE 8 バイト浮動小数点値

VT_CYCY+vbCurrencyCurrency

通貨値 (64 ビット整数、10,000 でスケーリング)

VT_BSTRBSTR+vbStringString

文字列値

VT_ERRORSCODE+vbError

HRESULT (COM エラー コードを表す符号付き 4 バイト整数)

VT_DATEDATE+vbDateDate

日付と時刻を表す 8 バイト浮動小数点値

VT_INTint

符号付き整数、int 型と等価

VT_UINTunsigned int

符号なし整数、unsigned int 型と等価

VT_DECIMALDECIMAL+vbDecimal

96 ビット (12 バイト) 符号なし整数、10 のべき乗の変数でスケーリング

VT_BOOLVARIANT_BOOL+vbBooleanBoolean

2 バイトのブール値 (0xFFFF = True、0x0000 = False)

VT_DISPATCHIDispatch*vbObjectObject

オブジェクトへの IDispatch* ポインター

VT_VARIANTVARIANT+vbVariantVariant

VARIANT (VT_BYREF または VT_ARRAY と組み合わせる場合のみ指定可能)

<"任意">|VT_ARRAY

配列として宣言するために VT_ARRAY をビット単位で任意の基本型と組み合わせます

<"任意">|VT_BYREF

値への参照として宣言するため VT_BYREF をビット単位で任意の基本型と組み合わせます

+ は Windows 固有の型を表します。標準 C/C++ の一部ではありません。

以下の表は MATLAB から COM への変換ルールをリストしています。

MATLAB から COM VARIANT への変換ルール

MATLAB データ型スカラー データの VARIANT配列データの VARIANTコメント
cell

1 行 1 列の cell 配列はセル内容の MATLAB データ型の変換ルールに準拠した型をもつ単一の VARIANT に変換されます。

多次元 cell 配列は、各配列メンバーの型が対応するセルの MATLAB データ型の変換ルールに準拠する、VT_VARIANT|VT_ARRAY 型の VARIANT に変換されます。

structure

VT_DISPATCH

VT_DISPATCH

MATLAB struct 配列は MWStruct オブジェクトに変換されます (クラス MWStruct (MATLAB Compiler SDK)を参照)。このオブジェクトは VT_DISPATCH 型として渡されます。

char

1 行 1 列の char 行列は文字列の長さが 1 で VT_BSTR 型の VARIANT に変換されます。

1 行 L 列の char 行列は MATLAB では長さ L の文字ベクトルを表すとみなされます。この場合は、VT_BSTR 型で文字列の長さ L の VARIANT に変換されます。複数行、あるいはより高度な次元の char 行列は VT_BSTR|VT_ARRAY 型の VARIANT に変換されます。変換された配列の各文字列の長さは 1 で、元の行列の各文字に対応しています。

文字ベクトルの配列は char 行列としてサポートされません。文字ベクトルの配列を渡すには、1 行 L 列の char 行列の cell 配列を使用します。

sparse

VT_DISPATCH

VT_DISPATCH

MATLAB スパース配列は MWSparse オブジェクトに変換されます (クラス MWSparse (MATLAB Compiler SDK)を参照)。このオブジェクトは VT_DISPATCH 型として渡されます。

double

実数で 1 行 1 列の double 行列は VT_R8 型の VARIANT に変換されます。複素数で 1 行 1 列の double 行列は VT_DISPATCH 型の VARIANT に変換されます。

実数で多次元の double 行列は VT_R8|VT_ARRAY 型の VARIANT に変換されます。複素数で多次元の double 行列は VT_DISPATCH 型の VARIANT に変換されます。

複素数配列は MWComplex クラスを使用して、コンパイルされた MATLAB 関数との間で受け渡しされます (クラス MWComplexを参照)。

single

実数で 1 行 1 列の single 行列は VT_R4 型の VARIANT に変換されます。複素数で 1 行 1 列の single 行列は VT_DISPATCH 型の VARIANT に変換されます。

実数で多次元の single 行列は VT_R4|VT_ARRAY 型の VARIANT に変換されます。複素数で多次元の single 行列は VT_DISPATCH 型の VARIANT に変換されます。

複素数配列は MWComplex クラスを使用して、コンパイルされた MATLAB 関数との間で受け渡しされます (クラス MWComplexを参照)。

int8

実数で 1 行 1 列の int8 行列は VT_I1 型の VARIANT に変換されます。複素数で 1 行 1 列の int8 行列は VT_DISPATCH 型の VARIANT に変換されます。

実数で多次元の int8 行列は VT_I1|VT_ARRAY 型の VARIANT に変換されます。複素数で多次元の int8 行列は VT_DISPATCH 型の VARIANT に変換されます。

複素数配列は MWComplex クラスを使用して、コンパイルされた MATLAB 関数との間で受け渡しされます (クラス MWComplexを参照)。

uint8

実数で 1 行 1 列の uint8 行列は VT_UI1 型の VARIANT に変換されます。複素数で 1 行 1 列の uint8 行列は VT_DISPATCH 型の VARIANT に変換されます。

実数で多次元の uint8 行列は VT_UI1|VT_ARRAY 型の VARIANT に変換されます。複素数で多次元の uint8 行列は VT_DISPATCH 型の VARIANT に変換されます。

複素数配列は MWComplex クラスを使用して、コンパイルされた MATLAB 関数との間で受け渡しされます (クラス MWComplexを参照)。

int16

実数で 1 行 1 列の int16 行列は VT_I2 型の VARIANT に変換されます。複素数で 1 行 1 列の int16 行列は VT_DISPATCH 型の VARIANT に変換されます。

実数で多次元の int16 行列は VT_I2|VT_ARRAY 型の VARIANT に変換されます。複素数で多次元の int16 行列は VT_DISPATCH 型の VARIANT に変換されます。

複素数配列は MWComplex クラスを使用して、コンパイルされた MATLAB 関数との間で受け渡しされます (クラス MWComplexを参照)。

uint16

実数で 1 行 1 列の uint16 行列は VT_UI2 型の VARIANT に変換されます。複素数で 1 行 1 列の uint16 行列は VT_DISPATCH 型の VARIANT に変換されます。

実数で多次元の uint16 行列は VT_UI2|VT_ARRAY 型の VARIANT に変換されます。複素数で多次元の uint16 行列は VT_DISPATCH 型の VARIANT に変換されます。

複素数配列は MWComplex クラスを使用して、コンパイルされた MATLAB 関数との間で受け渡しされます (クラス MWComplexを参照)。

int32

1 行 1 列の int32 行列は VT_I4 型の VARIANT に変換されます。複素数で 1 行 1 列の int32 行列は VT_DISPATCH 型の VARIANT に変換されます。

多次元の int32 行列は VT_I4|VT_ARRAY 型の VARIANT に変換されます。複素数で多次元の int32 行列は VT_DISPATCH 型の VARIANT に変換されます。

複素数配列は MWComplex クラスを使用して、コンパイルされた MATLAB 関数との間で受け渡しされます (クラス MWComplexを参照)。

uint32

1 行 1 列の uint32 行列は VT_UI4 型の VARIANT に変換されます。複素数で 1 行 1 列の uint32 行列は VT_DISPATCH 型の VARIANT に変換されます。

多次元の uint32 行列は VT_UI4|VT_ARRAY 型の VARIANT に変換されます。複素数で多次元の uint32 行列は VT_DISPATCH 型の VARIANT に変換されます。

複素数配列は MWComplex クラスを使用して、コンパイルされた MATLAB 関数との間で受け渡しされます (クラス MWComplexを参照)。

関数ハンドル

VT_EMPTY

VT_EMPTY

サポートされていません

Java® クラス

VT_EMPTY

VT_EMPTY

サポートされていません

ユーザー クラス

VT_EMPTY

VT_EMPTY

サポートされていません

logical

VT_Bool

VT_Bool|VT_ARRAY

 

以下の表では COM から MATLAB への変換ルールをリストしています。

COM VARIANT から MATLAB への変換ルール

VARIANTMATLAB データ型 (スカラーまたは配列データ)コメント
VT_EMPTY

該当なし

空配列が作成されます。

VT_I1int8 
VT_UI1uint8 
VT_I2int16 
VT_UI2uint16 
VT_I4int32 
VT_UI4uint32 
VT_R4single 
VT_R8double 
VT_CYdouble 
VT_BSTRchar

VT_BSTR 型の VARIANT は 1 行 L 列の MATLAB char 配列に変換されます。ここで、L は変換される文字ベクトルの長さです。VT_BSTR|VT_ARRAY 型の VARIANT は 1 行 L 列の char 配列の MATLAB cell 配列に変換されます。

VT_ERRORint32 
VT_DATEdouble

1. VARIANT 日付は 1899 年 12 月 31 日午前 0 時に開始する double として格納されます。MATLAB 日付は 0/0/00 00:00:00 に開始する double として格納されます。したがって、VARIANT 日付である 0.0 は MATLAB の数値の日付である 693960.0 にマッピングされます。VARIANT 日付は MATLAB double 型に変換され、693960.0 ずつインクリメントされます。
2. VARIANT 日付はオプションで文字ベクトルに変換できます。型強制の詳細は、データ変換フラグを参照してください。

VT_INTint32 
VT_UINTuint32 
VT_DECIMALdouble 
VT_BOOLlogical 
VT_DISPATCH

("場合により異なる")

IDispatch* ポインターは、指し示す先のコンテキスト内で処理されます。オブジェクトは既知のデータ抽出および変換ルールでサポートされる型でなければなりません。あるいは、単一の VARIANT 型を指す汎用 Value プロパティを公開します。オブジェクトから抽出されたデータは取得した特定の VARIANT のルールに基づいて変換されます。

現在、Excel®Range オブジェクトと共に、MATLAB CompilerMWStruct 型、MWComplex 型、MWSparse 型、MWArg 型がサポートされています。

<"任意">|VT_BYREF

("場合により異なる")

任意の基本型へのポインターは、指し示す先のルールに従って処理されます。結果の MATLAB 配列には値のディープ コピーが含まれます。

<"任意">|VT_ARRAY

("場合により異なる")

多次元の VARIANT 配列は多次元の MATLAB 配列に変換され、各要素は基本型のルールに従って変換されます。VT_VARIANT|VT_ARRAY 型の多次元の VARIANT 配列は多次元の cell 配列に変換され、各セルはその特定の型のルールに従って変換されます。