Números (WMI)

No MOF, os números são dígitos que descrevem valores numéricos. O MOF fornece uma variedade de tipos de dados que se traduzem em Automação e também permite que esses números estejam em formatos diferentes. A tabela a seguir lista os valores numéricos aos quais o MOF dá suporte.

Tipo de dados Tipo de automação Descrição
sint8 VT_I2 Inteiro de 8 bits com sinal.
sint16 VT_I2 Inteiro de 16 bits com sinal.
sint32 VT_I4 Inteiro de 32 bits com sinal.
sint64 VT_BSTR Inteiro de 64 bits com sinal no formato de cadeia de caracteres. Esse tipo segue o formato hexadecimal ou decimal de acordo com as regras do ANSI (American National Standards Institute).
real32 VT_R4 Valor de ponto flutuante de 4 bytes que segue o padrão do Institute of Electric and Electronics Engineers, Inc. (IEEE).
real64 VT_R8 Valor de ponto flutuante de 8 bytes que segue o padrão IEEE.
uint8 VT_UI1 Inteiro de 8 bits sem sinal.
uint16 VT_I4 Inteiro de 16 bits sem sinal.
uint32 VT_I4 Inteiro de 32 bits sem sinal.
uint64 VT_BSTR Inteiro de 64 bits sem sinal no formato de cadeia de caracteres. Esse tipo segue o formato hexadecimal ou decimal de acordo com as regras do ANSI C.

Embora flexível, o código MOF encontra algumas alterações ao lidar com a Automação:

  • Você deve codificar inteiros de 64 bits como cadeias de caracteres.

    A automação não dá suporte a um tipo integral de 64 bits.

  • Os tipos de automação nem sempre correspondem no tamanho do bit aos tipos de dados MOF.

    Por exemplo, a Automação usa VT_I4 para retornar um valor de 16 bits sem sinal. Essa discrepância existe devido a problemas de extensão de sinal. Se a Automação usar VT_I2 em vez de VT_I4, 65.536 parecerá ser o valor 1, causando problemas de tipo e intervalo. Da mesma forma, a Automação representa o tipo uint32 como VT_I4 porque não existe um tipo inteiro maior para conter uint32.

  • Você não precisa alterar nenhuma representação para tipos numerais de 8 bits.

    A automação dá suporte a VT_UI1, um tipo de 8 bits sem sinal.

O MOF dá suporte a constantes longas. Você declara uma constante longa usando uma série simples de dígitos com um sinal negativo opcional. Uma constante longa não pode exceder o tamanho da variável declarada para mantê-la. Alguns exemplos de constantes longas são 1000 e 12310.

O MOF também dá suporte a formatos numéricos alternativos. A tabela a seguir lista os caracteres especiais que você deve usar para descrever constantes hexadecimais, binárias e octais.

Constante Caractere especial Exemplo
Decimal
Nenhum
val = 65
Hexadecimal
Prefixo 0x
val = 0x41
Octal
0 à esquerda
val = 0101
Binário
B à direita
val = 1000001B

Você pode usar uma constante de ponto flutuante para representar uma notação científica, bem como frações, conforme mostrado a seguir:

3.14
-3.14
-1.2778E+02

O WMI considera constantes de ponto flutuante como tipos de VT_R8 para Automação.

O exemplo a seguir descreve declarações de classe e instância que ilustram como usar cada um dos tipos de dados numéricos para definir propriedades:

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