我正在爲C++中的Outlook 2007做一個加載項。Outlook加載項。如何管理項目事件
我需要從Outlook項目(聯繫人,約會,任務和註釋)中捕獲創建,更改或刪除事件,但我發現的唯一信息/示例是Visual Basic,因此我不知道連接事件處理程序。
下面是相關的一些信息:http://msdn.microsoft.com/en-us/library/bb208390(v=office.12).aspx
歡迎任何幫助:)謝謝
更新
對不起採取這一長期更新,我已經出城。我有一些懷疑/問題,你可能會知道如何提供幫助。
在我的情況下,我正在開始這個項目,所以我對這一切有點困惑。我有從IDTExtensibility2派生的類OutlookAddin。我還有另一個叫做AutoSync的類,當事件觸發時我想要做所有的方法等等。此類的一個對象在OutlookAddin.cpp OnStartupComplete中初始化。
根據你的帖子MyClass應從IDispEventSimpleImpl<1 /*N*/, MyClass, &__uuidof(Outlook::ItemsEvents)>
延伸,但其中哪一個? OutlookAddin或AutoSync?
我應該把這個代碼放在哪裏呢?
CComPtr<Outlook::MAPIFolder> folder;
// get the folder you're interested in
CComPtr<Outlook::_Items> items;
hr = folder->get_Items(&items);
hr = MyItemEvents::DispEventAdvise(items, &__uuidof(Outlook::ItemsEvents));
typedef IDispEventSimpleImpl<1 /*N*/, MyClass,
&__uuidof(Outlook::ItemsEvents)> MyItemEvents;
我讀過您發佈的鏈接,但仍然有這些疑惑...
更新2
這是比較複雜的,而不是理解我,雖然在第一個實例。
所以我有這樣的:
extern _ATL_FUNC_INFO OnSimpleEventInfo;
_ATL_FUNC_INFO OnSimpleEventInfo = {CC_STDCALL,VT_EMPTY,0};
然後在OutlookAddin.cpp,OnConnection方法:
OutlookAddin.h
class OutlookAddin :
public IDTExtensibility2,
public IDispEventSimpleImpl<1, OutlookAddin, &__uuidof(Outlook::ItemEvents)>
...
BEGIN_SINK_MAP(OutlookAddin)
SINK_ENTRY_INFO(1, __uuidof(Outlook::ItemEvents), 0xf002, OutlookAddin::OnItemChange, &OnSimpleEventInfo)
END_SINK_MAP()
...
void __stdcall OnItemChange();
'OnSimpleEventInfo' 被定義一樣
CComPtr<Outlook::MAPIFolder> folder;
CComPtr<Outlook::_Items> items;
OutlookWorker::GetInstance()->GetNameSpacePtr()->GetDefaultFolder(olFolderContacts, &folder);
folder->get_Items(&items);
DispEventAdvise(items, &__uuidof(Outlook::ItemsEvents));
b eing'OutlookWorker :: GetInstance() - > GetNameSpacePtr()'_NameSpacePtr保留所有環境的地方。
此處的預期行爲是在創建/編輯/刪除ContactItem時觸發OutlookAddin類中的函數「OnItemChange」,但這種情況沒有發生......我將結構改爲一切,位於主類OutlookAddin中。然後在函數'OnItemChange'上,我將開始我之前告訴過的'AutoSync'對象。
無論如何,我遵循你給我的文章,真的很有用,謝謝。你還有其他建議嗎?
感謝您的耐心等待。
謝謝你,我要帶看看這個;) – framara 2010-05-06 14:25:18
問題更新了,如果你可以看看。謝謝。 – framara 2010-05-11 13:09:44
@framara,已更新。 – 2010-05-11 13:45:40