共用方式為


連接點全域函式

這些函式支持連接點和接收對應。

重要

下表所列的函式不能用於在 Windows 執行階段 中執行的應用程式。

函式 描述
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 值。

備註

接收會實作連接點所支援的傳出介面。 用戶端會使用 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);

參數


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

另請參閱

函式
連接點巨集