Share via


型タグ フィールドの設定

VARIANT 型変数には、データのデータ型を示す型タグ フィールド vt があります。 VARIANT 型の戻り値は、型タグ フィールドが戻り値のデータ型に設定されたメソッドによって返されます。 メソッド呼び出しの VARIANT 型入力パラメーターには、サポートされている値のいずれかにアプリケーションによって設定された型タグ フィールドが必要です。 パラメーター型とデータ型の対応は次のとおりです。

パラメーターのタイプ データ型
PROPTYPE_LONG
VT_I2またはVT_I4
PROPTYPE_DATE
VT_DATE
PROPTYPE_BINARY
VT_BSTRまたは (VT_BSTR |VT_BYREF)
PROPTYPE_STRING
VT_BSTRまたは (VT_BSTR |VT_BYREF)

 

次の例は、上記のバリアント データ型を初期化する方法を示しています。

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