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 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 textstor.h
DLL Msctf.dll
可再发行组件 Windows 2000 专业版上的 TSF 1.0

另请参阅

ITextStoreACP

ITextStoreACP::UnadviseSink

ITextStoreACPServices

TS_AS_* 常量