Определение того, был ли изменен, но не сохранен элемент 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;
}