Nombres (WMI)
Dans MOF, les nombres sont des chiffres qui décrivent des valeurs numériques. MOF fournit un large éventail de types de données qui se traduisent en Automation, et permet également à ces nombres d’être dans différents formats. Le tableau suivant répertorie les valeurs numériques que MOF prend en charge.
Type de données | Type Automation | Description |
---|---|---|
sint8 | VT_I2 | Entier 8 bits signé. |
sint16 | VT_I2 | Entier 16 bits signé. |
sint32 | VT_I4 | Entier 32 bits signé. |
sint64 | VT_BSTR | Entier 64 bits signé sous forme de chaîne. Ce type suit le format hexadécimal ou décimal conformément aux règles C de l’American National Standards Institute (ANSI). |
real32 | VT_R4 | Valeur à virgule flottante de 4 octets qui suit la norme Institute of Electrical and Electronics Engineers, Inc. (IEEE). |
real64 | VT_R8 | Valeur à virgule flottante de 8 octets qui suit la norme IEEE. |
uint8 | VT_UI1 | Entier 8 bits non signé. |
uint16 | VT_I4 | Entier 16 bits non signé. |
uint32 | VT_I4 | Entier 32 bits non signé. |
uint64 | VT_BSTR | Entier 64 bits non signé sous forme de chaîne. Ce type suit le format hexadécimal ou décimal en fonction des règles ANSI C. |
Bien que flexible, le code MOF rencontre des modifications lors de la gestion d’Automation :
Vous devez encoder des entiers 64 bits sous forme de chaînes.
Automation ne prend pas en charge un type intégral 64 bits.
Les types Automation ne correspondent pas toujours à la taille de bits aux types de données MOF.
Par exemple, Automation utilise VT_I4 pour retourner une valeur 16 bits non signée. Cette différence existe en raison de problèmes d’extension de signature. Si Automation a utilisé VT_I2 au lieu de VT_I4, 65 536 semblent être la valeur 1, provoquant des problèmes de type et de plage. De même, Automation représente le type uint32 comme VT_I4, car il n’existe aucun type entier plus grand pour contenir uint32.
Vous n’avez pas besoin de modifier une représentation pour les types de chiffres 8 bits.
Automation prend en charge VT_UI1, un type 8 bits non signé.
MOF prend en charge les constantes longues. Vous déclarez une constante longue à l’aide d’une série simple de chiffres avec un signe négatif facultatif. Une constante longue ne peut pas dépasser la taille de la variable déclarée pour la contenir. Voici quelques exemples de constantes longues : 1 000 et 12310.
MOF prend également en charge d’autres formats numériques. Le tableau suivant répertorie les caractères spéciaux que vous devez utiliser pour décrire les constantes hexadécimales, binaires et octales.
Constant | Caractère spécial | Exemple |
---|---|---|
Décimal |
Aucun |
val = 65 |
Hexadécimal |
Préfixe 0x |
val = 0x41 |
Octal |
Début 0 |
val = 0101 |
Binaire |
Fin B |
val = 1000001B |
Vous pouvez utiliser une constante à virgule flottante pour représenter la notation scientifique ainsi que les fractions, comme indiqué ci-dessous :
3.14
-3.14
-1.2778E+02
WMI considère les constantes à virgule flottante comme des types VT_R8 pour Automation.
L’exemple suivant décrit les déclarations de classe et d’instance qui illustrent comment utiliser chacun des types de données numériques pour définir des propriétés :
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;
};