予定からタイム ゾーンのプロパティを読み取る
このトピックでは、ReadTimeZones
予定からタイム ゾーン プロパティ PidLidAppointmentTimeZoneDefinitionStartDisplay と PidLidTimeZoneStruct を読み取るために、2 つの関数 BinToTZDEFINITION
BinToTZREG
と を呼び出す 関数を示します。
PidLidAppointmentTimeZoneDefinitionStartDisplay には 、TZDEFINITION 構造体の永続化された形式にマップされるストリームが含まれており、 PidLidTimeZoneStruct には 、TZREG 構造体の永続化された形式にマップされるストリームが含まれています。 正確な TZDEFINITION および TZREG 構造体を取得するには、 BinToTZDEFINITION
BinToTZREG
これらのプロパティのストリーム値を適切に解析するために使用されます。 これら 2 つの関数は、 バイナリ プロパティからストリームを解析して TZDEFINITION 構造体を読み取り 、 バイナリ プロパティからストリームを解析して TZREG 構造体を読み取る方法でそれぞれ定義されています。
void ReadTimeZones(LPMAPIPROP lpAppointment)
{
HRESULT hRes = S_OK;
LPSPropTagArray lpNamedPropTags = NULL;
MAPINAMEID NamedID[2] = {0};
LPMAPINAMEID lpNamedID[2];
lpNamedID[0] = &NamedID[0];
lpNamedID[1] = &NamedID[1];
NamedID[0].lpguid = (LPGUID)&PSETID_Appointment;
NamedID[0].ulKind = MNID_ID;
NamedID[0].Kind.lID = dispidTimeZoneStruct;
NamedID[1].lpguid = (LPGUID)&PSETID_Appointment;
NamedID[1].ulKind = MNID_ID;
NamedID[1].Kind.lID = dispidApptTZDefStartDisplay;
hRes = lpAppointment->GetIDsFromNames(
2,
lpNamedID,
NULL,
&lpNamedPropTags);
if (SUCCEEDED(hRes) && lpNamedPropTags)
{
SizedSPropTagArray(2,sptaTzProps) = {2,
CHANGE_PROP_TYPE(lpNamedPropTags->aulPropTag[0],PT_BINARY),
CHANGE_PROP_TYPE(lpNamedPropTags->aulPropTag[1],PT_BINARY),
};
LPSPropValue lpProps = NULL;
ULONG cProps = 0;
hRes = lpAppointment->GetProps(
(LPSPropTagArray)&sptaTzProps,
NULL,
&cProps,
&lpProps);
if (SUCCEEDED(hRes) && 2 == cProps && lpProps)
{
if (PT_BINARY == PROP_TYPE(lpProps[0].ulPropTag))
{
TZREG* ptzReg = BinToTZREG(lpProps[0].Value.bin.cb,lpProps[0].Value.bin.lpb);
// TODO: Do whatever is necessary with ptzReg.
delete ptzReg;
}
if (PT_BINARY == PROP_TYPE(lpProps[1].ulPropTag))
{
TZDEFINITION* ptzDef = BinToTZDEFINITION(lpProps[1].Value.bin.cb,lpProps[1].Value.bin.lpb);
// TODO: Do whatever is necessary with ptzDef.
delete[] ptzDef;
}
}
MAPIFreeBuffer(lpProps);
}
MAPIFreeBuffer(lpNamedPropTags);
}