Я создал надстройку Outlook в C ++ (VS6!), Которая отслеживает коллекцию InspectorsCollection, чтобы отследить, когда пользователь открывает или закрывает элемент контакта.Отлично работает.
Теперь я хочу, чтобы он отслеживал, когда пользователь сохраняет новый контакт или изменяет существующий.Я решил изменить класс CInspectorsCollectionEventHandler для работы с элементами контактов.Кажется, все в порядке, и FindConnectionPoint () и Advise () успешно, но мой Invoke () никогда не вызывается.
Вот как я настраиваюсь, когда моя библиотека запускается:
Outlook::MAPIFolderPtr pFolder = g_pNameSpace->GetDefaultFolder(Outlook::olFolderContacts);
if (pFolder != NULL) {
Outlook::_ItemsPtr pContactItems = pFolder->GetItems();
if (pContactItems != NULL)
m_pContactItemsEventHandler = new CItemsEventHandler(pContactItems);
}
Мой конструктор CItemsEventHandler вызывает SinkEvents () (ниже), который выполняется правильно.
Вот ключевые части моего класса CItemsEventHandler:
STDMETHODIMP CItemsEventHandler::QueryInterface(REFIID riid, void** ppv)
{
if (NULL == ppv) return E_POINTER;
*ppv = NULL;
HRESULT hr = S_OK;
if ((__uuidof(Outlook::ItemsEvents) == riid) ||
(IID_IUnknown == riid) || (IID_IDispatch == riid))
*ppv = static_cast<IDispatch*>(this);
else
hr = E_NOINTERFACE;
if (NULL != *ppv)
reinterpret_cast<IUnknown*>(*ppv)->AddRef();
return hr;
}
void CItemsEventHandler::SinkEvents(LPDISPATCH pItems)
{
HRESULT hr;
// Get server's IConnectionPointContainer interface.
IConnectionPointContainer* pCPC;
hr = pItems->QueryInterface(IID_IConnectionPointContainer, (void **)&pCPC);
if (SUCCEEDED(hr)) {
// Find connection point for events we're interested in.
hr = pCPC->FindConnectionPoint(__uuidof(Outlook::ItemsEvents), &m_pConnection);
if (SUCCEEDED(hr))
{
AddRef();
hr = m_pConnection->Advise(static_cast<IDispatch*>(this), &m_dwCookie);
}
// Release the IConnectionPointContainer
pCPC->Release();
}
}
Похоже, все выполняется нормально,и код основан на коде, который работает (для инспекторов), но я просто не получаю никаких звонков на мой Invoke ()!Есть идеи?