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 retorno
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 retorno
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 retorno
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.