データ変換
変換ルール
このセクションでは、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 | - | 初期化されていない |
VT_I1 | char | - | - | 符号付き 1 バイト文字 |
VT_UI1 | 符号なし | vbByte | Byte | 符号なし 1 バイト文字 |
VT_I2 | short | vbInteger | Integer | 符号付き 2 バイト整数 |
VT_UI2 | unsigned short | - | - | 符号なし 2 バイト整数 |
VT_I4 | long | vbLong | Long | 符号付き 4 バイト整数 |
VT_UI4 | unsigned long | - | - | 符号なし 4 バイト整数 |
VT_R4 | float | vbSingle | Single | IEEE® 4 バイト浮動小数点値 |
VT_R8 | double | vbDouble | Double | IEEE 8 バイト浮動小数点値 |
VT_CY | CY + | vbCurrency | Currency | 通貨値 (64 ビット整数、10,000 でスケーリング) |
VT_BSTR | BSTR + | vbString | String | 文字列値 |
VT_ERROR | SCODE + | vbError | - |
|
VT_DATE | DATE + | vbDate | Date | 日付と時刻を表す 8 バイト浮動小数点値 |
VT_INT | int | - | - | 符号付き整数、 |
VT_UINT | unsigned int | - | - | 符号なし整数、 |
VT_DECIMAL | DECIMAL + | vbDecimal | - | 96 ビット (12 バイト) 符号なし整数、10 のべき乗の変数でスケーリング |
VT_BOOL | VARIANT_BOOL + | vbBoolean | Boolean | 2 バイトのブール値 (0xFFFF = True、0x0000 = False) |
VT_DISPATCH | IDispatch* | vbObject | Object | オブジェクトへの |
VT_VARIANT | VARIANT + | vbVariant | Variant |
|
<"任意">|VT_ARRAY | 配列として宣言するために | |||
<"任意">|VT_BYREF | 値への参照として宣言するため | |||
+ Windows® 固有の型を表します。標準 C/C++ の一部ではありません。 |
MATLAB から COM VARIANT への変換ルール
MATLAB データ型 | スカラー データの VARIANT 型 | 配列データの VARIANT 型 | コメント |
---|---|---|---|
cell | 1 行 1 列の cell 配列はセル内容の MATLAB データ型の変換ルールに準拠した型をもつ単一の | 多次元 cell 配列は、各配列メンバーの型が対応するセルの MATLAB データ型の変換ルールに準拠する、 | |
structure |
|
| MATLAB |
char | 1 行 1 列の | 1 行 L 列の | string の配列は |
sparse |
|
| MATLAB スパース配列は |
double | 実数で 1 行 1 列の double 行列は | 実数で多次元の double 行列は | 複素数配列は |
single | 実数で 1 行 1 列の single 行列は | 実数で多次元の single 行列は | 複素数配列は |
int8 | 実数で 1 行 1 列の | 実数で多次元の | 複素数配列は |
uint8 | 実数で 1 行 1 列の | 実数で多次元の | 複素数配列は |
int16 | 実数で 1 行 1 列の | 実数で多次元の | 複素数配列は |
uint16 | 実数で 1 行 1 列の | 実数で多次元の | 複素数配列は |
int32 | 1 行 1 列の | 多次元の | 複素数配列は |
uint32 | 1 行 1 列の | 多次元の | 複素数配列は |
関数ハンドル |
|
| サポートされていません |
Java® クラス |
|
| サポートされていません |
ユーザー クラス |
|
| サポートされていません |
logical |
|
|
COM VARIANT から MATLAB への変換ルール
VARIANT 型 | MATLAB データ型 (スカラーまたは配列データ) | コメント |
---|---|---|
VT_EMPTY | N/A | 空配列が作成されます。 |
VT_I1 | int8 |
|
VT_UI1 | uint8 |
|
VT_I2 | int16 |
|
VT_UI2 | uint16 |
|
VT_I4 | int32 |
|
VT_UI4 | uint32 |
|
VT_R4 | single |
|
VT_R8 | double |
|
VT_CY | double |
|
VT_BSTR | char |
|
VT_ERROR | int32 |
|
VT_DATE | double |
|
VT_INT | int32 |
|
VT_UINT | uint32 |
|
VT_DECIMAL | double |
|
VT_BOOL | logical |
|
VT_DISPATCH | Varies |
現在、Excel® の |
anything |VT_BYREF | Varies | 任意の基本型へのポインターは、指し示す先のルールに従って処理されます。結果の MATLAB 配列には値のディープ コピーが含まれます。 |
anything |VT_ARRAY | Varies | 多次元の |
配列形式フラグ
コンポーネントには、配列データを双方向に形式化する方法を制御するフラグがあります。一般的には、MATLAB 関数の意図する入力と出力に合うクライアント コードを、コンパイルされた COM オブジェクトの対応するメソッドを使用し、MATLAB から COM VARIANT への変換ルールおよびCOM VARIANT から MATLAB への変換ルールにリストされるルールに従って開発する必要があります。これが可能ではない場合もあります。たとえば、既存の MATLAB コードが Excel のようなサードパーティ製品と共に使用されている場合などです。
以下の表は配列形式フラグを示しています。
配列形式フラグ
フラグ | 説明 |
---|---|
| 入力配列に使用される配列形式化ルールを定義します。
|
|
|
| 出力配列に使用される配列形式化ルールを定義します。出力配列は MATLAB 配列で、コンパイルされた COM オブジェクトにより作成され、メソッド呼び出しからクライアントへの出力パラメーターとして送られます。このフラグの値である |
| (入れ子の cell 配列にのみ使用可能)。 |
| (Excel 範囲にのみ使用可能)。メソッド呼び出しからのターゲット出力が Excel ワークシートのセル範囲で、出力配列のサイズと形状が呼び出しの時点で不明な場合、このフラグを |
| このフラグを |
データ変換フラグ
MATLAB Compiler SDK コンポーネントには、MATLAB 型への特定の VARIANT
型の変換を制御するフラグが含まれています。これらのフラグは以下のとおりです。
CoerceNumericToType
このフラグはデータ コンバーターに対して、すべての数値 VARIANT
データを特定の 1 つの MATLAB 型に変換するように指示します。このフラグによって影響を受ける VARIANT
型コードは VT_I1
、VT_UI1
、VT_I2
、VT_UI2
、VT_I4
、VT_UI4
、VT_R4
、VT_R8
、VT_CY
、VT_DECIMAL
、VT_INT
、VT_UINT
、VT_ERROR
、VT_BOOL
、および VT_DATE
です。このフラグに対して有効な値は mwTypeDefault
、mwTypeChar
、mwTypeDouble
、mwTypeSingle
、mwTypeLogical
、mwTypeInt8
、mwTypeUint8
、mwTypeInt16
、mwTypeUint16
、mwTypeInt32
、および 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
に設定します。