Définition du champ de balise de type
Les variables de type Variant ont un champ de balise de type VT qui indique le type de données des données. Les valeurs de retour de type Variant sont retournées par les méthodes avec le champ type tag défini sur le type de données de la valeur de retour. Les paramètres d’entrée de type Variant dans un appel de méthode doivent avoir le champ de balise de type défini par l’application sur l’une des valeurs prises en charge. La correspondance entre les types de paramètres et les types de données est la suivante.
| Type de paramètre | Type de données |
|---|---|
| PROPTYPE _ long |
VT _ I2 ou VT _ I4 |
| _Date PROPTYPE |
_Date VT |
| _binaire PROPTYPE |
VT _ BSTR ou (VT _ BSTR | VT _ ByRef) |
| _chaîne PROPTYPE |
VT _ BSTR ou (VT _ BSTR | VT _ ByRef) |
L’exemple suivant montre comment initialiser les types de données variant listés ci-dessus.
HRESULT hr;
VARIANT vEMail;
VARIANT vNotBefore;
VARIANT vCount;
VARIANT vByRef;
BSTR bstr = NULL;
SYSTEMTIME st;
//Set the BSTR variant data type.
VariantInit(&vEMail);
vEMail.vt = VT_BSTR;
vEMail.bstrVal = SysAllocString(L"someone@example.com");
if (NULL == vEMail.bstrVal)
{
hr = E_OUTOFMEMORY;
//Handle error.
}
//Use the variant.
VariantClear(&vEMail); //when done
//Set the BSTR|BYREF variant data type.
VariantInit(&vByRef);
vByRef.vt = VT_BSTR | VT_BYREF;
vByRef.pbstrVal = &bstr;
//Use the variant.
VariantClear(&vByRef); //when done
SysFreeString(bstr);
//Set the DATE variant data type.
memset(&st, 0, sizeof(SYSTEMTIME));
st.wYear = 2000;
st.wMonth = 1;
st.wDay = 1;
st.wHour = 12;
VariantInit(&vNotBefore);
vNotBefore.vt = VT_DATE;
if (!SystemTimeToVariantTime(&st, &vNotBefore.date))
{
hr = E_FAIL;
//Handle error.
}
//Use the variant.
VariantClear(&vNotBefore); //when done
//Set the LONG variant data type.
VariantInit(&vCount);
vCount.vt = VT_I4;
vCount.long = 123456;
//Use the variant.
VariantClear(&vCount); //when done