共用方式為


連接對應

OLE 控制項能夠向其他應用程式公開介面。 這些介面只允許從容器存取該控制項。 如果 OLE 控制項想要存取其他 OLE 物件的外部介面,則必須建立連接點。 此連接點允許控制外部分派地圖的傳出存取,例如事件對應或通知函式。

Microsoft Foundation Class Library 提供支援連接點的程式設計模型。 在此模型中,「連接對應」可用來指定 OLE 控制項的介面或連接點。 連線對應包含每個連接點的一個宏。 如需連線對應的詳細資訊,請參閱 類別 CConnectionPoint

一般而言,控制項只支援兩個連接點:一個用於事件,一個用於屬性通知。 這些是由 COleControl 基類實作,而且控制項寫入器不需要額外的工作。 您必須手動新增您想要在類別中實作的任何其他連接點。 為了支援連線對應和點,MFC 提供下列宏:

連線對應宣告和分界

名稱 描述
BEGIN_CONNECTION_PART 宣告實作其他連接點的內嵌類別(必須在類別宣告中使用)。
END_CONNECTION_PART 結束連接點的宣告(必須在類別宣告中使用)。
CONNECTION_IID 指定控制項連接點的介面識別碼。
DECLARE_CONNECTION_MAP 宣告連接對應將用於類別(必須在類別宣告中使用)。
BEGIN_CONNECTION_MAP 開始連接對應的定義(必須在類別實作中使用)。
END_CONNECTION_MAP 結束連接對應的定義(必須在類別實作中使用)。
CONNECTION_PART 指定控制項連接對應中的連接點。

下列函式可協助接收使用連接點建立和中斷連線:

連接點的初始化/終止

名稱 描述
AfxConnectionAdvise 建立來源與接收之間的連線。
AfxConnectionUnadvise 中斷來源與接收之間的連線。

BEGIN_CONNECTION_PART

BEGIN_CONNECTION_PART使用 宏開始定義事件和屬性通知連接點以外的其他連接點。

BEGIN_CONNECTION_PART(theClass, localClass)

參數

theClass 指定連接點為的控制項類別名稱。

localClass 指定實作連接點的本機類別名稱。

備註

在定義類別成員函式的宣告 ( .h ) 檔案中,使用 BEGIN_CONNECTION_PART 宏啟動連接點。 然後新增 CONNECTION_IID 宏和您想要實作的任何其他成員函式。 最後,使用 宏完成連接點對應 END_CONNECTION_PART

需求

頁首afxdisp.h

END_CONNECTION_PART

結束連接點的宣告。

END_CONNECTION_PART(localClass)

參數

localClass
指定實作連接點之區域類別的名稱。

需求

頁首afxdisp.h

CONNECTION_IID

在 和 END_CONNECTION_PART 宏之間 BEGIN_CONNECTION_PART ,使用 來定義 OLE 控制項所支援連接點的介面識別碼。

CONNECTION_IID(iid)

參數

iid
連接點所呼叫介面的介面 ID。

備註

iid 變數是介面識別碼,用來識別連接點在其連接的接收上呼叫的介面。 例如:

CONNECTION_IID(IID_ISampleSink)

指定呼叫 介面的連接 ISinkInterface 點。

需求

頁首afxdisp.h

DECLARE_CONNECTION_MAP

程式中的每個 COleControl 衍生類別都可以提供一個連接對應,用於指定您的控制項所支援的其他連接點。

DECLARE_CONNECTION_MAP()

備註

如果您的控制項支援其他點,請在類別宣告結尾使用 DECLARE_CONNECTION_MAP 宏。 然後,在定義 類別成員函式的 .cpp 檔案中,使用 BEGIN_CONNECTION_MAP 宏、 CONNECTION_PART 每個控制項連接點的宏,以及 END_CONNECTION_MAP 宣告連接對應結尾的宏。

需求

頁首afxdisp.h

BEGIN_CONNECTION_MAP

程式中每個 COleControl 衍生類別可以提供連接對應,以指定控制項支援的連接點。

BEGIN_CONNECTION_MAP(theClass, theBase)

參數

theClass
指定連接對應之控制項類別的名稱。

theBase
指定 的基類 theClass 名稱。

備註

在定義類別成員函式的實作 ( .CPP ) 檔案中,使用 BEGIN_CONNECTION_MAP 宏啟動連接對應,然後使用宏新增每個連接點 CONNECTION_PART 的宏專案。 最後,使用 END_CONNECTION_MAP 宏完成連接對應。

需求

頁首afxdisp.h

END_CONNECTION_MAP

結束連接對應的定義。

END_CONNECTION_MAP()

需求

頁首afxdisp.h

CONNECTION_PART

地圖 OLE 控制項的連接點至特定介面識別碼。

CONNECTION_PART(theClass, iid, localClass)

參數

theClass
指定連接點為的控制項類別名稱。

iid
連接點所呼叫介面的介面 ID。

localClass
指定實作連接點之區域類別的名稱。

備註

例如:

BEGIN_CONNECTION_MAP(CMyClass, CCmdTarget)
    CONNECTION_PART(CMyClass, IID_ISampleSink, SampleConnPt)
END_CONNECTION_MAP()

使用呼叫 IID_ISinkInterface 介面的連接點,實作連接對應。

需求

頁首afxdisp.h

AfxConnectionAdvise

呼叫此函式,以在 所 pUnkSrc 指定的來源與 所 pUnkSink 指定的接收之間建立連接。

BOOL AFXAPI AfxConnectionAdvise(
    LPUNKNOWN pUnkSrc,
    REFIID iid,
    LPUNKNOWN pUnkSink,
    BOOL bRefCount,
    DWORD FAR* pdwCookie);

參數

pUnkSrc
呼叫 介面之 物件的指標。

pUnkSink
實作 介面之 物件的指標。

iid
連接的介面識別碼。

bRefCount
對於跨進程連線,此參數必須是 TRUE ,並指出建立連接應該會導致 的參考計數 pUnkSink 遞增。

針對進程內連線, TRUE 表示建立連線應該會導致 的參考計數 pUnkSink 遞增。 FALSE 表示不應該遞增參考計數。

警告 :一般而言,無法預測哪些連線正在處理,以及哪些連線不在進程,因此建議一律將此參數設定為 TRUE

pdwCookie
傳回連接識別碼之 的指標 DWORD 。 當中斷連線時, dwCookie 這個值應該當做 參數傳遞至 AfxConnectionUnadvise

傳回值

如果已建立連接,則為非零;否則為 0。

範例

//CMySink is a CCmdTarget-derived class supporting automation.
//Instantiate the sink class.
CMySink mysink;

//Get a pointer to sink's IUnknown, no AddRef done.
IID iid = IID_IUnknown;
IUnknown* pUnkSink = mysink.GetInterface(&iid);

//Establish a connection between source and sink.
//pUnkSrc is IUnknown of server obtained by CoCreateInstance().
//dwCookie is a cookie identifying the connection, and is needed
//to terminate this connection.
AfxConnectionAdvise(pUnkSrc, IID_ISampleSink, pUnkSink, FALSE, &dwCookie);

需求

標頭:afxctl.h

AfxConnectionUnadvise

呼叫此函式,以中斷由 所 pUnkSrc 指定之來源與 接收之間的連接。 pUnkSink

BOOL AFXAPI AfxConnectionUnadvise(
    LPUNKNOWN pUnkSrc,
    REFIID iid,
    LPUNKNOWN pUnkSink,
    BOOL bRefCount,
    DWORD dwCookie);

參數

pUnkSrc
呼叫 介面之 物件的指標。

pUnkSink
實作 介面之 物件的指標。

iid
連接點介面的介面識別碼。

bRefCount
對於跨進程連線,此參數必須是 TRUE ,並指出建立連接應該會導致的參考計數 pUnkSink 遞減。

針對進程內連線, TRUE 表示建立連線應該會導致 的參考計數 pUnkSink 遞減。 FALSE 表示不應該遞減參考計數。

警告 :一般而言,無法預測哪些連線正在處理,以及哪些連線不在進程,因此建議一律將此參數設定為 TRUE

dwCookie
AfxConnectionAdvise 傳回的連接識別碼。

傳回值

如果連線已中斷連線,則為非零;否則為 0。

範例

//mysink is a CCmdTarget-derived class supporting automation.
//Get a pointer to sink's IUnknown, no AddRef done.
IID iid = IID_IUnknown;
IUnknown* pUnkSink = mysink.GetInterface(&iid);

//Terminate a connection between source and sink.
//pUnkSrc is IUnknown of server obtained by CoCreateInstance().
//dwCookie is a value obtained through AfxConnectionAdvise().
AfxConnectionUnadvise(pUnkSrc, IID_ISampleSink, pUnkSink, FALSE, dwCookie);

需求

標頭:afxctl.h

另請參閱

宏和全域