Compartir a través de


Método ITextStoreACP::AdviseSink (textstor.h)

El método ITextStoreACP::AdviseSink instala un nuevo receptor de aviso desde la interfaz ITextStoreACPSink o modifica un receptor de aviso existente. El parámetro punk especifica la interfaz de receptor.

Sintaxis

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

Parámetros

[in] riid

Especifica la interfaz del receptor.

[in] punk

Puntero a la interfaz del receptor. No puede ser NULL.

[in] dwMask

Especifica los eventos que notifican al receptor de aviso. Para obtener más información sobre los posibles valores de parámetro, vea constantes TS_AS_*.

Valor devuelto

Este método puede devolver uno de estos valores.

Valor Descripción
S_OK
Método realizado correctamente.
CONNECT_E_ADVISELIMIT
No se pudo obtener un puntero de interfaz receptor.
E_INVALIDARG
No se admite la interfaz de receptor especificada.
E_UNEXPECTED
No se pudo obtener el objeto receptor especificado.

Comentarios

Las llamadas posteriores con la misma interfaz, representadas por el parámetro punk , se controlan como solicitudes para actualizar el parámetro dwMask . Los servidores no deben llamar al método AddRef en el receptor en respuesta a dicha solicitud.

Los servidores solo mantienen un único punto de conexión. Se produce un error en los intentos de avisar a un segundo objeto receptor hasta que se quite el objeto receptor original. Las aplicaciones deben usar el método ITextStoreACP::UnadviseSink para anular el registro del objeto receptor cuando no se requieren notificaciones.

Use este método para obtener la interfaz ITextStoreACPServices .

Ejemplos

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;
        
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado textstor.h
Archivo DLL Msctf.dll
Redistribuible TSF 1.0 en Windows 2000 Professional

Consulte también

ITextStoreACP

ITextStoreACP::UnadviseSink

ITextStoreACPServices

TS_AS_* (constantes)