数字 (WMI)

在 MOF 中,用数字来描述数值。 MOF 提供各种转换为自动化的数据类型,还允许这些数字以不同的格式显示。 下表列出了 MOF 支持的数值。

数据类型 自动化类型 说明
sint8 VT_I2 8 位有符号整数。
sint16 VT_I2 16 位有符号整数。
sint32 VT_I4 32 位有符号整数。
sint64 VT_BSTR 字符串形式的有符号 64 位整数。 根据美国国家标准协会 (ANSI) C 规则,此类型遵循十六进制或十六进制格式。
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 规则,此类型遵循十六进制或十进制格式。

尽管很灵活,但 MOF 代码在处理自动化时确实会遇到一些变化:

  • 必须将 64 位整数编码为字符串。

    自动化不支持 64 位整型类型。

  • 自动化类型在位大小上并不总是对应于 MOF 数据类型。

    例如,自动化使用 VT_I4 返回无符号 16 位值。 存在这种差异是由于符号扩展问题。 如果自动化使用 VT_I2 而不是 VT_I4,则 65,536 似乎是值 1,从而导致类型和范围问题。 同样,自动化将 uint32 类型表示为 VT_I4 因为不存在包含 uint32 的较大整数类型。

  • 无需更改 8 位数字类型的任何表示形式。

    自动化支持无符号 8 位类型 VT_UI1。

MOF 支持长常量。 使用带有可选负号的一系列简单数字声明长常量。 长常量不能超过声明为保留它的变量的大小。 长常量的一些示例包括 1000 和 12310。

MOF 还支持备用数字格式。 下表列出了描述十六进制、二进制和八进制常量时必须使用的特殊字符。

常数 特殊字符 示例
十进制

val = 65
十六进制
0x 前缀
val = 0x41
八进制
前导 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;
 };