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


Определение того, был ли изменен, но не сохранен элемент Outlook (вспомогательный справочник по Outlook)

This topic shows how to use the dispidFDirty dispatch ID to invoke the corresponding property on an Outlook item, to see whether the item has been modified and has not been saved.

Given an item object, you can use the IUnknown::QueryInterface method to obtain an IDispatch interface pointer. Функция в разделе FIsItemDirty принимает указатель IDispatchpdisp в качестве входного параметра. FIsItemDirty вызывает метод IDispatch::Invoke , указывая dispidFDirty в качестве аргумента для параметра dispIdMember и флаги DISPATCH_METHOD | DISPATCH_PROPERTYGET для wFlags, чтобы проверить, был ли изменен элемент. FIsItemDirty возвращает логическое значение (True , чтобы указать, что элемент имеет несохраненные изменения; в противном случае — значение False).

bool FIsItemDirty(IDispatch *pdisp)
{
    DISPPARAMS dispparams;
    UINT uArgErr;
    HRESULT hr = S_OK;
    CComVariant varDirty;
    dispparams.rgvarg = 0;
    dispparams.cArgs = 0;
    dispparams.cNamedArgs = 0;
    dispparams.rgdispidNamedArgs = NULL;
    hr = pdisp->Invoke(dispidFDirty,
        IID_NULL,
        LOCALE_SYSTEM_DEFAULT,
        DISPATCH_METHOD | DISPATCH_PROPERTYGET,
        &dispparams,
        &varDirty,
        NULL,
        &uArgErr);
    return SUCCEEDED(hr) && varDirty.bVal;
}

См. также