Números (WMI)

En MOF, los números son dígitos que describen valores numéricos. MOF proporciona una variedad de tipos de datos que se traducen en Automation y también permite que esos números estén en diferentes formatos. En la tabla siguiente se enumeran los valores numéricos que admite MOF.

Tipo de datos Tipo de automatización Descripción
sint8 VT_I2 Entero de 8 bits con signo.
sint16 VT_I2 Entero de 16 bits con signo.
sint32 VT_I4 Entero de 32 bits con signo.
sint64 VT_BSTR Entero de 64 bits con signo en forma de cadena. Este tipo sigue el formato hexadecimal o decimal según las reglas del American National Standards Institute (ANSI).
real32 VT_R4 Valor de punto flotante de 4 bytes que sigue el estándar del Institute of Electrical and Electronics Engineers, Inc. (IEEE).
real64 VT_R8 Valor de punto flotante de 8 bytes que sigue el estándar de IEEE.
uint8 VT_UI1 Entero de 8 bits sin signo.
uint16 VT_I4 Entero de 16 bits sin signo.
uint32 VT_I4 Entero de 32 bits sin signo.
uint64 VT_BSTR Entero de 64 bits sin signo en forma de cadena. Este tipo sigue el formato hexadecimal o decimal según las reglas de ANSI C.

Aunque es flexible, el código MOF encuentra algunos cambios al tratar con Automation:

  • Los enteros de 64 bits se deben codificar como cadenas.

    Automation no admite un tipo integral de 64 bits.

  • Los tipos de Automation no siempre se corresponden en tamaño de bits a los tipos de datos de MOF.

    Por ejemplo, Automation usa VT_I4 para devolver un valor de 16 bits sin signo. Esta discrepancia existe debido a problemas de extensión de signo. Si Automation usara VT_I2 en lugar de VT_I4, 65 536 parecería ser el valor 1, lo que provoca problemas de tipo y intervalo. De forma similar, Automation representa el tipo uint32 como VT_I4 porque no existe ningún tipo entero mayor que contenga uint32.

  • No es necesario cambiar ninguna representación de los tipos numéricos de 8 bits.

    Automation admite VT_UI1, un tipo de 8 bits sin signo.

MOF admite constantes largas. Se declara una constante larga mediante una serie simple de dígitos con un signo negativo opcional. Una constante larga no puede superar el tamaño de la variable que se declara para contenerla. Algunos ejemplos de constantes largas son 1000 y 12310.

MOF también admite formatos numéricos alternativos. En la tabla siguiente se enumeran los caracteres especiales que debe usar para describir constantes hexadecimales, binarias y octales.

Constante Carácter especial Ejemplo
Decimal
Ninguno
val = 65
Hexadecimal
Prefijo 0x
val = 0x41
Octal
0 inicial
val = 0101
Binary
B final
val = 1000001B

Puede usar una constante de punto flotante para representar notación científica, así como fracciones, como se muestra a continuación:

3.14
-3.14
-1.2778E+02

WMI considera constantes de punto flotante como tipos de VT_R8 para Automation.

En el ejemplo siguiente se describen las declaraciones de clase e instancia que muestran cómo usar cada uno de los tipos de datos numéricos para establecer propiedades:

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;
 };