Поделиться через


Считывание свойств часового пояса встречи

В этом разделе показана функция , ReadTimeZonesкоторая вызывает две функции BinToTZDEFINITION и BinToTZREGдля чтения свойств часового пояса PidLidAppointmentTimeZoneDefinitionStartDisplay и PidLidTimeZoneStruct из встречи.

PidLidAppointmentTimeZoneDefinitionStartDisplay содержит поток, который сопоставляется с сохраненным форматом структуры TZDEFINITION , а PidLidTimeZoneStruct содержит поток, который сопоставляется с сохраненным форматом структуры TZREG . Чтобы получить точные структуры TZDEFINITION и TZREG , BinToTZDEFINITION и BinToTZREG используются для соответствующего анализа значений потока этих свойств. Эти две функции определяются при анализе потока из двоичного свойства для чтения структуры 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); 
}

См. также