数値 (WMI)
MOF では、数値は数的な値を表す数字です。 MOF には、Automation に変換されるさまざまなデータ型が用意されており、それらの数値を異なる形式にすることもできます。 次の表に、MOF でサポートされる数値の一覧を示します。
データ型 | Automation の種類 | 説明 |
---|---|---|
sint8 | VT_I2 | 符号付き 8 ビット整数。 |
sint16 | VT_I2 | 符号付き 16 ビット整数。 |
sint32 | VT_I4 | 符号付き 32 ビット整数。 |
sint64 | VT_BSTR | 文字列形式の符号付き 64 ビット整数。 この型は、米国規格協会 (ANSI) C 規則に従った 16 進数または 10 進数の形式に従います。 |
real32 | VT_R4 | Electrical and Electronics Engineers, Inc. (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 ビット整数は文字列としてエンコードする必要があります。
Automation では、64 ビット整数型はサポートされていません。
Automation 型は、常に MOF データ型にビット サイズで対応するとは限りません。
たとえば、Automation は VT_I4 を使用して、符号なし 16 ビット値を返します。 この不一致は、符号拡張の問題が原因で発生します。 Automation が VT_I4 ではなく VT_I2 を使用した場合、65,536 が値 1 のように見え、型と範囲の問題が発生します。 同様に、Automation は uint32 型を VT_I4 として表します。これは、uint32 を含めるための、より大きな整数型がないためです。
8 ビット数値型の表現を変更する必要はありません。
Automation では、符号なし 8 ビット型である VT_UI1 がサポートされています。
MOF では、長い定数がサポートされています。 省略可能な負符号を持つ単純な一連の数字を使用して、長い定数を宣言します。 長い定数は、それを保持するために宣言されている変数のサイズを超えることはできません。 長い定数の例としては、1000 と 12310 があります。
MOF では、代替の数値形式もサポートされています。 次の表に、16 進数、バイナリ、8 進数の定数を記述するために使用する必要がある特殊文字を示します。
一定 | 特殊文字 | 例 |
---|---|---|
Decimal (10 進数型) |
なし |
val = 65 |
16 進数 |
0x 接頭辞 |
val = 0x41 |
8 進変換 |
先頭の 0 |
val = 0101 |
バイナリ |
末尾の B |
val = 1000001B |
次に示すように、浮動小数点定数を使用して、指数表記と分数を表すことができます。
3.14
-3.14
-1.2778E+02
WMI では、Automation の 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;
};