IOleLink::BindToSource 方法 (oleidl.h)

系結儲存在連結物件內的Moniker,以啟動連結來源的連接。

語法

HRESULT BindToSource(
  [in] DWORD    bindflags,
  [in] IBindCtx *pbc
);

參數

[in] bindflags

指定連結來源上次系結時,如果鏈接來源有不同的 CLSID,則如何繼續進行。 如果此參數為零,而且CLSID不同,則方法會失敗並傳回OLE_E_CLASSDIFF。 如果指定 OLELINKBIND 列舉中的OLELINKBIND_EVENIFCLASSDIFF值,而且 CLSID 不同,則方法會成功系結並更新儲存在連結物件中的 CLSID。

[in] pbc

系結內容上要用於這個系結作業之 IBindCtx 介面的指標。 此參數可以是 Null。 系結內容會在系結程式期間快取系結的物件、包含使用系結內容套用至所有作業的參數,並提供系結實作應該擷取其環境相關信息的方法。 如需詳細資訊,請參閱 IBindCtx

傳回值

此方法會在成功時傳回S_OK。 其他可能的傳回值包括下列專案。

傳回碼 Description
OLE_E_CLASSDIFF
連結來源未系結,因為其CLSID已變更。 只有在 bindflags 參數中未指定OLELINKBIND_EVENIFCLASSDIFF旗標時,才會傳回此錯誤。
MK_E_NOOBJECT
如果連結來源的Moniker是複合) 找不到在複合中識別的某些中繼物件,則找不到連結來源或 (。
E_UNSPEC
連結的Moniker為 NULL
 

系結Moniker可能需要呼叫 CreateBindCtx 函式;因此,此方法可能會傳回 CreateBindCtx 所產生的錯誤。

備註

來電者的附註

一般而言,您的容器應用程式不需要直接呼叫 IOleLink::BindToSource 方法。 當您必須啟用連結來源的連線時,您的容器通常會呼叫 IOleObject::D oVerbIOleObject::UpdateIOleLink::Update。 鏈接物件的這些方法實作會呼叫 IOleLink::BindToSource。 您的容器也可以呼叫 OleRun 函式,在鏈接物件上呼叫時呼叫 IOleLink::BindToSource

在先前所列的每個範例中, IOleLink::BindToSource 間接呼叫時,bindflags 參數會設定為零。 因此,如果連結來源的類別與上次鏈接物件系結時的內容不同,這些呼叫可能會因為OLE_E_CLASSDIFF錯誤而失敗。 例如,如果原始連結來源是使用者後續使用 [變更類型] 對話框) 轉換 (至 Excel 電子表格的內嵌 Lotus 電子表格,就會發生這種情況。

如果您想要讓容器系結,即使鏈接來源現在有不同的 CLSID,您可以直接呼叫 IOleLink::BindToSource ,並指定 bindflags 參數的OLELINKBIND_EVENIFCLASSDIFF。 此呼叫會系結至連結來源,並更新連結物件的CLSID。 或者,您的容器可以刪除現有的連結,並使用 OleCreateLink 函式來建立新的連結物件。

實作者的注意事項

鏈接物件會快取系結期間取得之連結來源的介面指標。

鏈接物件的 IOleLink::BindToSource 實作會先嘗試使用由連結來源相對 Moniker 所組成的複合檔的 Moniker 進行系結。 如果成功,它會更新鏈接的絕對Moniker。 否則,它會嘗試使用絕對Moniker進行系結,如果成功,則會更新相對Moniker。

如果 IOleLink::BindToSource 系結至連結來源,它會呼叫複合檔的 IOleContainer::LockContainer 實作,讓包含的複合文件在連結來源執行時保持運作。 IOleLink::BindToSource 也會呼叫連結來源的 IOleObject::AdvisorIDataObject::D Advise 實作來設定諮詢連線。 IOleLink::UnbindSource 實作會解除鎖定容器,並刪除諮詢連線。

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 oleidl.h

另請參閱

IDataObject::D Advise

IOleContainer::LockContainer

IOleLink

IOleLink::UnbindSource

IOleLink::Update

IOleObject::建議

IOleObject::D oVerb

IOleObject::Update

OleRun