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 |
---|---|
|
Método realizado correctamente. |
|
No se pudo obtener un puntero de interfaz receptor. |
|
No se admite la interfaz de receptor especificada. |
|
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 |