Funciones globales de punto de conexión
Estas funciones proporcionan compatibilidad con los puntos de conexión y los mapas de receptor.
Importante
Las funciones enumeradas en la tabla siguiente no se pueden usar en las aplicaciones que se ejecutan en Windows Runtime.
Función | Descripción |
---|---|
AtlAdvise | Crea una conexión entre el punto de conexión de un objeto y el receptor de un cliente. |
AtlUnadvise | Finaliza la conexión establecida mediante AtlAdvise . |
AtlAdviseSinkMap | Aconseja o desaconseja las entradas en un mapa de receptor de eventos. |
Requisitos
Encabezado: atlbase.h
AtlAdvise
Crea una conexión entre el punto de conexión de un objeto y el receptor de un cliente.
Importante
Esta función no se puede usar en aplicaciones que se ejecutan en Windows Runtime.
HRESULT AtlAdvise(
IUnknown* pUnkCP,
IUnknown* pUnk,
const IID& iid,
LPDWORD pdw);
Parámetros
pUnkCP
[in] Puntero a IUnknown
del objeto con el que el cliente quiere conectarse.
pUnk
[in] Un puntero a IUnknown
del cliente.
iid
[in] GUID del punto de conexión. Normalmente, es lo mismo que la interfaz saliente administrada por el punto de conexión.
pdw
[out] Puntero a la cookie que identifica de forma única la conexión.
Valor devuelto
Valor HRESULT estándar.
Comentarios
El receptor implementa la interfaz saliente compatible con el punto de conexión. El cliente usa la cookie pdw para quitar la conexión pasándola a AtlUnadvise.
Ejemplo
LPUNKNOWN m_pSourceUnk;
LPUNKNOWN m_pSinkUnk;
DWORD m_dwCustCookie;
// create source object
HRESULT hr = CoCreateInstance (CLSID_MyComponent, NULL, CLSCTX_ALL,
IID_IUnknown, (LPVOID*)&m_pSourceUnk);
ATLASSERT(SUCCEEDED(hr));
// Create sink object. CMySink is a CComObjectRootEx-derived class
// that implements the event interface methods.
CComObject<CMySink>* pSinkClass;
CComObject<CMySink>::CreateInstance(&pSinkClass);
hr = pSinkClass->QueryInterface (IID_IUnknown, (LPVOID*)&m_pSinkUnk);
ATLASSERT(SUCCEEDED(hr));
hr = AtlAdvise (m_pSourceUnk, m_pSinkUnk, __uuidof(_IMyComponentEvents), &m_dwCustCookie);
ATLASSERT(SUCCEEDED(hr));
AtlUnadvise
Finaliza la conexión establecida mediante AtlAdvise.
Importante
Esta función no se puede usar en aplicaciones que se ejecutan en Windows Runtime.
HRESULT AtlUnadvise(
IUnknown* pUnkCP,
const IID& iid,
DWORD dw);
Parámetros
pUnkCP
[in] Puntero a IUnknown
del objeto con el que está conectado el cliente.
iid
[in] GUID del punto de conexión. Normalmente, es lo mismo que la interfaz saliente administrada por el punto de conexión.
dw
[in] Cookie que identifica de forma única la conexión.
Valor devuelto
Valor HRESULT estándar.
Ejemplo
LPUNKNOWN m_pSourceUnk;
LPUNKNOWN m_pSinkUnk;
DWORD m_dwCustCookie;
// create source object
HRESULT hr = CoCreateInstance (CLSID_MyComponent, NULL, CLSCTX_ALL,
IID_IUnknown, (LPVOID*)&m_pSourceUnk);
ATLASSERT(SUCCEEDED(hr));
// Create sink object. CMySink is a CComObjectRootEx-derived class
// that implements the event interface methods.
CComObject<CMySink>* pSinkClass;
CComObject<CMySink>::CreateInstance(&pSinkClass);
hr = pSinkClass->QueryInterface (IID_IUnknown, (LPVOID*)&m_pSinkUnk);
ATLASSERT(SUCCEEDED(hr));
hr = AtlAdvise (m_pSourceUnk, m_pSinkUnk, __uuidof(_IMyComponentEvents), &m_dwCustCookie);
ATLASSERT(SUCCEEDED(hr));
// do something
CComBSTR bstrMsg(L"Hi there!");
((CMyComponent*)m_pSourceUnk)->Fire_ShowMyMsg(bstrMsg);
hr = AtlUnadvise (m_pSourceUnk, __uuidof(_IMyComponentEvents), m_dwCustCookie);
ATLASSERT(SUCCEEDED(hr));
AtlAdviseSinkMap
Llame a esta función para notificar o no notificar todas las entradas del mapa de eventos del receptor del objeto.
Importante
Esta función no se puede usar en aplicaciones que se ejecutan en Windows Runtime.
HRESULT AtlAdviseSinkMap(T* pT, bool bAdvise);
Parámetros
pT
[in] Puntero al objeto que contiene el mapa del receptor.
bAdvise
[in] TRUE si se aconsejan todas las entradas del receptor; FALSE si todas las entradas del receptor no se aconsejan.
Valor devuelto
Valor HRESULT estándar.
Ejemplo
class CMyDlg :
public CAxDialogImpl<CMyDlg>
{
public:
BEGIN_MSG_MAP(CMyDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_HANDLER(IDOK, BN_CLICKED, OnClickedOK)
COMMAND_HANDLER(IDCANCEL, BN_CLICKED, OnClickedCancel)
CHAIN_MSG_MAP(CAxDialogImpl<CMyDlg>)
END_MSG_MAP()
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
CAxDialogImpl<CMyDlg>::OnInitDialog(uMsg, wParam, lParam, bHandled);
AtlAdviseSinkMap(this, TRUE);
bHandled = TRUE;
return 1; // Let the system set the focus
}
// Remainder of class declaration omitted.