Partilhar via


Funções globais de ponto de conexão

Essas funções fornecem suporte para pontos de conexão e mapas de coletor.

Importante

As funções listadas na tabela a seguir não podem ser usadas em aplicativos que são executados no Windows Runtime.

Função Descrição
AtlAdvise Cria uma conexão entre o ponto de conexão de um objeto e o coletor de um cliente.
AtlUnadvise Encerra a conexão estabelecida por meio de AtlAdvise.
AtlAdviseSinkMap Recomenda ou não recomenda entradas em um mapa do coletor de eventos.

Requisitos

Cabeçalho: atlbase.h

AtlAdvise

Cria uma conexão entre o ponto de conexão de um objeto e o coletor de um cliente.

Importante

Esta função não pode ser usada em aplicativos executados no Windows Runtime.

HRESULT    AtlAdvise(
    IUnknown* pUnkCP,
    IUnknown* pUnk,
    const IID& iid,
    LPDWORD pdw);

Parâmetros

pUnkCP
[entrada] Um ponteiro para o IUnknown do objeto com o qual o cliente deseja se conectar.

pUnk
[entrada] Um ponteiro para o IUnknown do cliente.

iid
[entrada ] O GUID do ponto de conexão. Normalmente, ele é o mesmo que a interface de saída gerenciada pelo ponto de conexão.

pdw
[saída] Um ponteiro para o cookie que identifica exclusivamente a conexão.

Valor de Devolução

Um valor HRESULT padrão.

Comentários

O coletor implementa a interface de saída compatível com o ponto de conexão. O cliente usa o cookie pdw para remover a conexão, passando-a para AtlUnadvise.

Exemplo

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

Encerra a conexão estabelecida por AtlAdvise.

Importante

Esta função não pode ser usada em aplicativos executados no Windows Runtime.

HRESULT    AtlUnadvise(
    IUnknown* pUnkCP,
    const IID& iid,
    DWORD dw);

Parâmetros

pUnkCP
[entrada] Um ponteiro para o IUnknown do objeto com o qual o cliente está conectado.

iid
[entrada ] O GUID do ponto de conexão. Normalmente, ele é o mesmo que a interface de saída gerenciada pelo ponto de conexão.

dw
[entrada] O cookie que identifica exclusivamente a conexão.

Valor de Devolução

Um valor HRESULT padrão.

Exemplo

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

Chame essa função para recomendar ou não recomendar todas as entradas no mapa de eventos do coletor do objeto.

Importante

Esta função não pode ser usada em aplicativos executados no Windows Runtime.

HRESULT AtlAdviseSinkMap(T* pT, bool bAdvise);

Parâmetros

pT
[entrada] Um ponteiro para o objeto que contém o mapa do coletor.

bAdvise
[entrada] TRUE se todas as entradas do coletor devem ser recomendadas; FALSE se todas as entradas do coletor não devem ser recomendadas.

Valor de Devolução

Um valor HRESULT padrão.

Exemplo

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.

Confira também

Funções
Macros de ponto de conexão