MOF では、数値は数値を表す数字です。 MOF には、Automation に変換されるさまざまなデータ型が用意されており、それらの数値を異なる形式にすることもできます。 次の表に、MOF でサポートされる数値を示します。
データ型 | オートメーションの種類 | 形容 |
---|---|---|
sint8 | VT_I2 | 符号付き 8 ビット整数。 |
sint16 | VT_I2 | 符号付き 16 ビット整数。 |
sint32 | VT_I4 | 符号付き 32 ビット整数。 |
sint64 | VT_BSTR | 文字列形式の符号付き 64 ビット整数。 この型は、米国標準協会 (ANSI) C 規則に従って、16 進数または 10 進数の形式に従います。 |
real32 を する | VT_R4 | 電気電子学会 (IEEE) 標準に従う 4 バイト浮動小数点値。 |
real64 | VT_R8 | IEEE 標準に従う 8 バイト浮動小数点値。 |
uint8 を する | VT_UI1 | 符号なし 8 ビット整数。 |
uint16 を する | VT_I4 | 符号なし 16 ビット整数。 |
uint32 を する | VT_I4 | 符号なし 32 ビット整数。 |
uint64 を する | VT_BSTR | 文字列形式の符号なし 64 ビット整数。 この型は、ANSI C 規則に従って 16 進数または 10 進形式に従います。 |
柔軟性はありますが、MOF コードでは Automation を処理するときにいくつかの変更が発生します。
64 ビット整数を文字列としてエンコードする必要があります。
オートメーションでは、64 ビット整数型はサポートされていません。
オートメーション型は、常に MOF データ型にビット サイズで対応するとは限りません。
たとえば、Automation では、VT_I4を使用して、符号なし 16 ビット値が返されます。 この不一致は、サインイン拡張機能の問題が原因で発生します。 Automation がVT_I4ではなくVT_I2を使用した場合、65,536 が値 1 のように見え、型と範囲の問題が発生します。 同様に、オートメーションは、uint32 型をVT_I4として表します。これは、uint32 含む大きな整数型がないためです。
8 ビット数値型の表現を変更する必要はありません。
オートメーションでは、符号なし 8 ビット型VT_UI1がサポートされています。
MOF では、長い定数がサポートされています。 省略可能な負の符号を持つ単純な一連の数字を使用して、長い定数を宣言します。 長い定数は、それを保持するために宣言されている変数のサイズを超えることはできません。 長い定数の例としては、1000 と 12310 があります。
MOF では、代替の数値形式もサポートされています。 次の表に、16 進数、バイナリ、および 8 進数の定数を記述するために使用する必要がある特殊文字を示します。
定数 | 特殊文字 | 例 |
---|---|---|
小数 |
何一つ |
val = 65 |
16 進 数 |
0x プレフィックス |
val = 0x41 |
8 進 数 |
先頭 0 |
val = 0101 |
バイナリ |
末尾 B |
val = 1000001B |
次に示すように、浮動小数点定数を使用して、指数表記と分数を表すことができます。
3.14
-3.14
-1.2778E+02
WMI では、浮動小数点定数はオートメーションの VT_R8 型と見なされます。
次の例では、各数値データ型を使用してプロパティを設定する方法を示すクラスとインスタンスの宣言について説明します。
Class NumericDataClass
{
[key] uint8 Duint8;
SInt8 Dchar;
UInt16 Dtword;
Sint16 Dinst16;
UInt32 Ddword;
Sint32 Dinst1;
Sint32 Dinst2;
Sint32 Dinst3;
Sint32 Dinst4;
Sint32 Dinst5;
Real32 Dfloat;
Real64 Ddouble1;
Real64 Ddouble2;
};
instance of NumericDataClass
{
Duint8 = 122;
Dchar = -128;
Dtword = 30;
Dinst16 = -1445;
Ddword = 6987777;
Dinst1 = -455589;
Dinst2 = 23;
Dinst3 = 03; // Base 8
Dinst4 = 0xFe; // Base 16
Dinst5 = 11b; // Base 2
Dfloat = 3.1478;
Ddouble1 = 99987.3654;
Ddouble2 = 2.3e-2;
};