Глобальные функции точек подключения
Эти функции обеспечивают поддержку точек подключения и карт приемника.
Внимание
Функции, перечисленные в следующей таблице, нельзя использовать в приложениях, которые выполняются в среда выполнения 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);
Параметры
точка
[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.