Поделиться через


Глобальные функции точек подключения

Эти функции обеспечивают поддержку точек подключения и карт приемника.

Важно!

Функции, перечисленные в следующей таблице, нельзя использовать в приложениях, которые выполняются в среда выполнения Windows.

Function Description
AtlAdvise Создает связь между точкой подключения объекта и приемником клиента.
AtlUnadvise Завершает подключение, установленное через AtlAdvise.
AtlAdviseSinkMap Советы или отмена записей в карте приемника событий.

Требования

Заголовок: atlbase.h

AtlAdvise

Создает связь между точкой подключения объекта и приемником клиента.

Важно!

Эту функцию нельзя использовать в приложениях, которые выполняются в среда выполнения Windows.

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

Параметры

pUnkCP
[in] Указатель на IUnknown объект, к которому клиент хочет подключиться.

Панк
[in] Указатель на клиент IUnknown.

Iid
[in] GUID точки подключения. Как правило, это то же самое, что и исходящий интерфейс, управляемый точкой подключения.

Pdw
[out] Указатель на файл cookie, который однозначно идентифицирует соединение.

Возвращаемое значение

Стандартное значение HRESULT.

Замечания

Приемник реализует исходящий интерфейс, поддерживаемый точкой подключения. Клиент использует файл cookie pdw для удаления подключения, передав его в AtlUnadvise.

Пример

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

Завершает подключение, установленное через AtlAdvise.

Важно!

Эту функцию нельзя использовать в приложениях, которые выполняются в среда выполнения Windows.

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

Параметры

pUnkCP
[in] Указатель на IUnknown объект, с которым подключен клиент.

Iid
[in] GUID точки подключения. Как правило, это то же самое, что и исходящий интерфейс, управляемый точкой подключения.

dw
[in] Файл cookie, который однозначно идентифицирует подключение.

Возвращаемое значение

Стандартное значение HRESULT.

Пример

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

Вызывайте эту функцию для соединения или разъединения всех записей в схеме событий приемника объекта.

Важно!

Эту функцию нельзя использовать в приложениях, которые выполняются в среда выполнения Windows.

HRESULT AtlAdviseSinkMap(T* pT, bool bAdvise);

Параметры

Pt
[in] Указатель на объект, содержащий карту приемника.

bAdvise
[in] ЗНАЧЕНИЕ TRUE, если все записи приемника должны быть рекомендуемы; ЗНАЧЕНИЕ FALSE, если все записи приемника должны быть неуправляемыми.

Возвращаемое значение

Стандартное значение HRESULT.

Пример

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.

См. также

Функции
Макросы для работы с точками подключения