数値 (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;
 };