连接点全局函数

这些函数支持连接点和接收器映射。

重要

下表中列出的函数不能在 Windows 运行时执行的应用程序中使用。

Function 说明
AtlAdvise 在对象的连接点和客户端的接收器间创建连接。
AtlUnadvise 终止通过 AtlAdvise 建立的连接。
AtlAdviseSinkMap 通知或取消通知事件接收器映射中的条目。

要求

标头:atlbase.h

AtlAdvise

在对象的连接点和客户端的接收器间创建连接。

重要

此函数不能用于在 Windows 运行时中执行的应用程序。

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

参数

pUnkCP
[in] 指向客户端要连接对象的 IUnknown 的指针。

pUnk
[in] 指向客户的 IUnknown 的指针。

iid
[in] 连接点的 GUID。 通常,这与由连接点管理的传出接口相同。

pdw
[out] 指向唯一标识连接的 Cookie 的指针。

返回值

标准 HRESULT 值。

备注

接收器实现连接点支持的传出接口。 客户端通过使用 pdw Cookie 将连接传递给 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.

另请参阅

函数
连接点宏