Метод 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_*.
Возвращаемое значение
Этот метод может возвращать одно из этих значений.
Значение | Описание |
---|---|
|
Метод выполнен успешно. |
|
Не удалось получить указатель интерфейса приемника. |
|
Указанный интерфейс приемника не поддерживается. |
|
Не удалось получить указанный объект приемника. |
Комментарии
Последующие вызовы с тем же интерфейсом, представленным параметром 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 Профессиональная |