連接點全域函式
這些函式支持連接點和接收對應。
重要
下表所列的函式不能用於在 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.