Поделиться через


Метод ITextStoreACP::AdviseSink (texttor.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
Header textstor.h
DLL Msctf.dll
Распространяемые компоненты TSF 1.0 в Windows 2000 Профессиональная

См. также раздел

ITextStoreACP

ITextStoreACP::UnadviseSink

ITextStoreACPServices

Константы TS_AS_*