Partager via


Définition du champ d’étiquette 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 des méthodes avec le champ de balise de type 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 des types de paramètres aux types de données est la suivante.

Type de paramètre Type de données
PROPTYPE_LONG
VT_I2 ou VT_I4
PROPTYPE_DATE
VT_DATE
PROPTYPE_BINARY
VT_BSTR ou (VT_BSTR | VT_BYREF)
PROPTYPE_STRING
VT_BSTR ou (VT_BSTR | VT_BYREF)

 

L’exemple suivant montre comment initialiser les types de données variant répertorié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