IMAPITable::Advise
適用於:Outlook 2013 |Outlook 2016
註冊建議接收物件,以接收影響數據表之指定事件的通知。
HRESULT Advise(
ULONG ulEventMask,
LPMAPIADVISESINK lpAdviseSink,
ULONG_PTR FAR * lpulConnection
);
參數
ulEventMask
[in]值,指出將產生通知的事件類型。 只有下列值有效:
fnevTableModified
lpAdviseSink
[in]建議接收物件的指標,以接收後續通知。 此建議接收對象必須已配置。
lpulConnection
[out]表示成功通知註冊的非零值指標。
傳回值
S_OK
通知註冊已成功完成。
MAPI_E_NO_SUPPORT
數據表實作不支援變更其數據列和數據行,或不支援通知。
註解
使用 IMAPITable::Advise 方法來註冊在提供者中實作以進行通知回呼的數據表物件。 每當數據表對象發生變更時,提供者會檢查 ulEventMask 參數中已設定的事件遮罩位,以及發生何種類型的變更。 如果已設定位,則提供者會呼叫 lpAdviseSink 參數所指示之建議接收物件的 IMAPIAdviseSink::OnNotify 方法來報告事件。 傳入通知結構至 OnNotify 例程的數據會描述事件。
呼叫 OnNotify 時,可能會在變更物件的呼叫期間,或在下列任何時間發生。 在支援多個執行線程的系統上, 對 OnNotify 的呼叫可能會發生在任何線程上。 若要將可能在不正常時間發生的 OnNotify 呼叫轉換成較安全處理的呼叫,提供者應該使用 HrThisThreadAdviseSink 函式。
若要提供通知,實作 建議 的提供者必須保留 lpAdviseSink 建議接收物件的指標複本;若要這樣做,它會針對建議接收呼叫 IUnknown::AddRef 方法來維護其對象指標,直到透過呼叫 IMAPITable::Unadvise 方法取消通知註冊為止。 「 建議 」實作應該將連接號碼指派給通知註冊,然後在此連接號碼上呼叫 AddRef ,然後再以 lpulConnection 參數傳回它。 服務提供者可以在取消註冊之前釋出建議接收物件,但在呼叫 Unadvise 之前,他們不得釋出連接編號。
在呼叫 Advise 成功且呼叫 Unadvise 之前,客戶端必須準備好讓建議接收物件釋出。 因此,客戶端應該在 建議 傳回之後釋放其建議接收物件,除非它具有特定的長期用途。
由於通知的異步行為,變更數據表數據行設定的實作可以接收以先前數據行順序組織之資訊的通知。 例如,對於剛從容器中刪除的訊息,可能會傳回數據表數據列。 進行數據行設定變更並傳送其相關信息,但尚未使用該資訊更新通知數據表檢視時,就會傳送這類通知。
如需通知程式的詳細資訊,請參閱 MAPI 中的事件通知。 如需數據表通知的特定資訊,請 參閱關於數據表通知。 如需使用 IMAPISupport 方法來支援通知的相關信息,請參閱 支援事件通知。
MFCMAPI 參考
如需 MFCMAPI 範例程式代碼,請參閱下表。
檔案 | Function | Comment |
---|---|---|
ContentsTableListCtrl.cpp |
CContestTableListCtrl::NotificationOn |
MFCMAPI 使用 IMAPITable::Advise 方法來註冊通知,讓數據表檢視保持最新狀態。 |
另請參閱
HrThisThreadAdviseSink
IMAPIAdviseSink::OnNotify
IMAPITable::Unadvise
TABLE_NOTIFICATION
IMAPITable:IUnknownMFCMAPI 作為程式代碼範例