Share via


ITextStoreACP::AdviseSink 方法 (textstor.h)

ITextStoreACP::AdviseSink 方法會從 ITextStoreACPSink 介面安裝新的建議接收,或修改現有的建議接收。 接收介面是由 punk 參數所指定。

語法

HRESULT AdviseSink(
  [in] REFIID   riid,
  [in] IUnknown *punk,
  [in] DWORD    dwMask
);

參數

[in] riid

指定接收介面。

[in] punk

接收介面的指標。 不可以是 NULL

[in] dwMask

指定通知建議接收的事件。 如需可能參數值的詳細資訊,請參閱 TS_AS_* 常數

傳回值

這個方法可以傳回其中一個值。

描述
S_OK
此方法成功。
CONNECT_E_ADVISELIMIT
無法取得接收介面指標。
E_INVALIDARG
不支援指定的接收介面。
E_UNEXPECTED
無法取得指定的接收物件。

備註

後續具有相同介面的呼叫,由 punk 參數表示,會當做更新 dwMask 參數的要求來處理。 伺服器不應該在接收上呼叫 AddRef 方法,以回應這類要求。

伺服器只會維護單一連接點。 嘗試建議第二個接收物件失敗,直到移除原始接收對象為止。 應用程式應該使用 ITextStoreACP::UnadviseSink 方法,在不需要通知時取消註冊接收物件。

使用這個方法來取得 ITextStoreACPServices 介面。

範例

CMyTextEditor ITextStoreACP


STDMETHODIMP CMyTextEditor::AdviseSink(REFIID riid, IUnknown *punk, DWORD dwMask)
{
        HRESULT         hr;
        IUnknown                *punkID;
        typedef struct
        {
        IUnknown                *punkID;
        ITextStoreACPSink       *pTextStoreACPSink;
        DWORD                   dwMask;
        }ADVISE_SINK, *PADVISE_SINK;    
        
        // Determine if the sink interface exists. 
        // Get the pointer to the IUnknown interface and check if the IUnknown 
        // pointer is the same as a pointer to an existing sink. 
        // If the sink exists, update the existing sink with the  
        // dwMask parameters passed to this method.      
        hr = QueryInterface(IID_IUnknown, (LPVOID*)&punkID);

        if(FAILED(hr))
        {
                hr = E_INVALIDARG;
        }       

        if(punkID == m_AdviseSink.punkID)
        {
                m_AdviseSink.dwMask = dwMask;
                hr = S_OK;
        }

        // If the sink does not exist, do the following: 
        // 1. Install a new sink. 
        // 2. Keep the pointer to the IUnknown interface to uniquely 
        //        identify this advise sink. 
        // 3. Set the dwMask parameter of this new sink to the dwMask  
        //    parameters passed to this method. 
        // 4. Increment the reference count. 
        // 5. Release the IUnknown pointer, since this pointer is no 
        //        longer required. 

        if(IsEqualIID(riid, IID_ITextStoreACPSink))
        {
                punk->QueryInterface(IID_ITextStoreACPSink,
                         (LPVOID*)&m_AdviseSink.pTextStoreACPSink);
                m_AdviseSink.punkID = punkID;
                m_AdviseSink.dwMask = dwMask;
                punkID->AddRef();
                punkID->Release();

                hr = S_OK;
        }
        return hr;
        
}

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 textstor.h
Dll Msctf.dll
可轉散發套件 Windows 2000 專業版上的 TSF 1.0

另請參閱

ITextStoreACP

ITextStoreACP::UnadviseSink

ITextStoreACPServices

TS_AS_* 常數