Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

データ変換

変換ルール

このセクションでは、MATLAB® Compiler SDK™ 製品で作成された COM コンポーネントのデータ変換ルールを説明します。これらのコンポーネントは Automation と互換性のあるデータ型をサポートするデュアル インターフェイス COM オブジェクトです。

メモ

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

注意

ほとんどの COM オートメーションは、セキュリティ リスクとなる可能性があるため、IIS (Internet Information Service) によって通常は阻止されるので注意してください。したがって、XLSREAD および他の Automation サービスは IIS で処理されたときに失敗し、object reference not set などのエラーが発生することがあります。

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

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

Win32 API は C/C++ で VARIANT を作成し操作する関数を多数提供し、Microsoft® Visual Basic® はこの型のネイティブ言語サポートを提供します。COM VARIANT の定義と API サポートについては、Microsoft Visual Studio® のドキュメンテーションを参照してください。VARIANT 変数は自己記述型で、その型のコードを構造体の内部フィールドとして格納します。

メモ

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

コンパイラ コンポーネントでサポートされている VARIANT 型コードのリストについては、サポートされる VARIANT 型コードを参照してください。

COM VARIANT と MATLAB 配列間の変換ルールについては、MATLAB から COM VARIANT への変換ルールおよびCOM VARIANT から MATLAB への変換ルールを参照してください。

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

VARIANT 型コード
(C/C++)
C/C++ の型VARIANT 型コード (Visual Basic)Visual Basic 型定義
VT_EMPTY-vbEmpty-

初期化されていない 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 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を参照。)このオブジェクトは VT_DISPATCH 型として渡されます。

char

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

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

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

sparse

VT_DISPATCH

VT_DISPATCH

MATLAB スパース配列は MWSparse オブジェクトに変換されます (クラス MWSparseを参照。)このオブジェクトは 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 関数との間で受け渡しされます。

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 関数との間で受け渡しされます。

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 関数との間で受け渡しされます。

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 関数との間で受け渡しされます。

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 関数との間で受け渡しされます。

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 関数との間で受け渡しされます。

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 関数との間で受け渡しされます。

関数ハンドル

VT_EMPTY

VT_EMPTY

サポートされていません

Java® クラス

VT_EMPTY

VT_EMPTY

サポートされていません

ユーザー クラス

VT_EMPTY

VT_EMPTY

サポートされていません

logical

VT_Bool

VT_Bool|VT_ARRAY

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

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

N/A

空配列が作成されます。

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 は変換される string の長さです。VT_BSTR|VT_ARRAY 型の VARIANT は 1 行 L 列の char 配列の MATLAB cell 配列に変換されます。

VT_ERRORint32

VT_DATEdouble

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 ずつインクリメントされます。

VARIANT 日付はオプションで string に変換できます。型強制の詳細については、データ変換フラグを参照してください。

VT_INTint32

VT_UINTuint32

VT_DECIMALdouble

VT_BOOLlogical

VT_DISPATCHVaries

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

現在、Excel®Range オブジェクトと共に、MWStruct 型、MWComplex 型、MWSparse 型、MWArg 型がサポートされています。COM コンポーネントで使用する型の詳細については、ユーティリティ クラスの参照を参照してください。

anything|VT_BYREFVaries

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

anything|VT_ARRAYVaries

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

配列形式フラグ

コンポーネントには、配列データを双方向に形式化する方法を制御するフラグがあります。一般的には、MATLAB 関数の意図する入力と出力に合うクライアント コードを、コンパイルされた COM オブジェクトの対応するメソッドを使用し、MATLAB から COM VARIANT への変換ルールおよびCOM VARIANT から MATLAB への変換ルールにリストされるルールに従って開発する必要があります。これが可能ではない場合もあります。たとえば、既存の MATLAB コードが Excel のようなサードパーティ製品と共に使用されている場合などです。

以下の表は配列形式フラグを示しています。

配列形式フラグ

フラグ 説明

InputArrayFormat

入力配列に使用される配列形式化ルールを定義します。
入力配列は VARIANT 配列で、クライアントにより作成され、コンパイルされた COM オブジェクトでのメソッド呼び出しに入力パラメーターとして送られます。

このフラグに対して有効な値は mwArrayFormatAsIsmwArrayFormatMatrix および mwArrayFormatCell です。

mwArrayFormatAsIs は配列を変更せずにそのまま渡します。

mwArrayFormatMatrix (既定) はすべての配列を行列として形式化します。入力 VARIANTVT_ARRAY| type 型の場合 (type は任意の数値型)、このフラグは効果がありません。入力 VARIANTVT_VARIANT|VT_ARRAY 型の場合、配列内の VARIANT が調べられます。それらが単一値で型が同種である場合、cell 配列の代わりに適切な型の MATLAB 行列が生成されます。

mwArrayFormatCell はすべての配列を MATLAB cell 配列であると解釈します。

InputArrayIndFlag

InputArrayFormat フラグと共に使用される入力配列の間接参照レベルを設定します (入れ子配列、つまり自身が配列である VARIANTVARIANT 配列にのみ適用可能)。このフラグの既定値は 0 であり、InputArrayFormat フラグを最も外側の配列に適用します。このフラグが 0 より大きい場合、たとえば N に等しい場合、形式化ルールは N 番目の入れ子レベルにルールを適用します。

OutputArrayFormat

出力配列に使用される配列形式化ルールを定義します。出力配列は MATLAB 配列で、コンパイルされた COM オブジェクトにより作成され、メソッド呼び出しからクライアントへの出力パラメーターとして送られます。このフラグの値である mwArrayFormatAsIsmwArrayFormatMatrix および mwArrayFormatCell は対応する InputArrayFormat フラグの値と同じ動作をします。

OutputArrayIndFlag

(入れ子の cell 配列にのみ使用可能)。OutputArrayFormat フラグと共に使用される出力配列の間接参照レベル。このフラグは InputArrayIndFlag と同様に機能します。

AutoResizeOutput

(Excel 範囲にのみ使用可能)。メソッド呼び出しからのターゲット出力が Excel ワークシートのセル範囲で、出力配列のサイズと形状が呼び出しの時点で不明な場合、このフラグを True に設定すると、各 Excel 範囲が出力配列に合うようにサイズ変更されます。

TransposeOutput

このフラグを True に設定して出力引数を転置します。Excel からのコンポーネントを呼び出すときに、MATLAB 関数が行ベクトルとして出力を返し、そのデータを列にする場合に役に立ちます。

データ変換フラグ

MATLAB Compiler SDK コンポーネントには、MATLAB 型への特定の VARIANT 型の変換を制御するフラグが含まれています。これらのフラグは以下のとおりです。

CoerceNumericToType

このフラグはデータ コンバーターに対して、すべての数値 VARIANT データを特定の 1 つの MATLAB 型に変換するように指示します。このフラグによって影響を受ける VARIANT 型コードは VT_I1VT_UI1VT_I2VT_UI2VT_I4VT_UI4VT_R4VT_R8VT_CYVT_DECIMALVT_INTVT_UINTVT_ERRORVT_BOOL、および VT_DATE です。このフラグに対して有効な値は mwTypeDefaultmwTypeCharmwTypeDoublemwTypeSinglemwTypeLogicalmwTypeInt8mwTypeUint8mwTypeInt16mwTypeUint16mwTypeInt32、および mwTypeUint32 です。

このフラグの既定値 mwTypeDefault は、データ変換にリストされているルールに従って数値データを変換します。

InputDateFormat

このフラグはデータ コンバーターに対して VARIANT 日付を MATLAB 日付に変換する方法を指示します。このフラグに対して有効な値は mwDateFormatNumeric (既定値) および mwDateFormatString です。この既定値では、サポートされる VARIANT 型コードにリストされているルールに従って VARIANT 日付が変換されます。mwDateFormatString フラグは VARIANT 日付をその string 表現に変換します。このフラグは VARIANT 型コード VT_DATE にのみ影響します。

OutputAsDate As Boolean

このフラグはデータ コンバーターに対して出力引数を日付として処理するよう指示します。既定では、コンパイルされた MATLAB 関数からの出力パラメーターである数値の日付は、COM の日付バイアス (693960) によるデクリメントだけでなく、COM 日付への型強制を必要とする Double として渡されます。すべての Double 型の出力値を変換するには、このフラグを True に設定します。

DateBias As Long

このフラグは COM から MATLAB の数値の日付への変換を実行するための日付バイアスを設定します。このプロパティの既定値は 693960 で、COM Date 型と MATLAB の数値の日付の差を表しています。このフラグにより、数値の日付が既に 693960 インクリメントされている既存の MATLAB コードは、コンポーネントでそのまま使用できます。そのようなコードで日付を処理するには、このプロパティを 0 に設定します。