IMoniker::BindToStorage 方法 (objidl.h)
系結至指定物件的儲存體。 不同于 IMoniker::BindToObject 方法,這個方法不會啟動 Moniker 所識別的物件。
語法
HRESULT BindToStorage(
[in] IBindCtx *pbc,
[in] IMoniker *pmkToLeft,
[in] REFIID riid,
[out] void **ppvObj
);
參數
[in] pbc
系結內容物件上 IBindCtx 介面的指標,用於這個系結作業。 系結內容會在系結程式期間快取系結的物件、包含使用系結內容套用至所有作業的參數,並提供 Moniker 實作應該擷取其環境相關資訊的方法。
[in] pmkToLeft
如果 Moniker 是複合 Moniker 的一部分,則指向這個 Moniker 左邊的 Moniker 指標。 這個參數主要是由 Moniker 實作者用來啟用複合 Moniker 的各種元件之間的合作。 Moniker 用戶端應該使用 Null。
[in] riid
要求之儲存體介面識別碼的參考,其指標將在 ppvObj中傳回。 通常要求的儲存體介面包括 IStorage、 IStream和 ILockBytes。
[out] ppvObj
接收 riid中所要求之介面指標的指標變數位址。 成功傳回時,*ppvObj 會包含 Moniker 所識別之物件儲存體的要求介面指標。 成功時,實作必須在儲存體上呼叫 AddRef 。 呼叫者必須負責呼叫 Release。 如果發生錯誤,*ppvObj 應該是 Null。
傳回值
這個方法可以傳回標準傳回值E_UNEXPECTED,以及下列值。
傳回碼 | 描述 |
---|---|
|
系結作業成功。 |
|
這個 Moniker 所識別的物件沒有自己的儲存體。 |
|
系結作業無法在系結內容 BIND_OPTS 結構所指定的時間限制內完成。 |
|
作業無法連線到儲存體,可能是因為網路裝置無法連線。 如需詳細資訊,請參閱 IMoniker::BindToObject。 |
|
找到中繼物件,但不支援完成系結作業所需的介面。 例如,如果專案 Moniker 的容器不支援 IOleItemContainer 介面,則會傳回此值。 |
|
無法存取儲存體物件。 |
這個方法也可以傳回與 IOleItemContainer::GetObject 方法相關聯的錯誤。
備註
BindToObject和BindToStorage方法之間有一個重要差異。 例如,如果您有識別試算表物件的 Moniker,呼叫 BindToObject 可提供試算表物件的存取權,而呼叫 BindToStorage 則可讓您存取試算表所在的儲存物件。
來電者附注
雖然沒有任何 COM Moniker 類別在其系結作業中呼叫這個方法,但可能適合在新的 Moniker 類別實作中呼叫此方法。 您可以在 BindToObject 實作中呼叫這個方法,該實作需要 pmkToLeft 參數所識別之物件的資訊,而且可以從物件的永續性儲存體中取得此方法,而不需要啟用。 例如,如果您的 Moniker 用來識別可以在不啟用其容器的情況下啟動的物件,您可能會發現此方法很有用。用戶端可以讀取其 Moniker 識別之物件的儲存體,也可以呼叫這個方法。
實作者的注意事項
您的實作應該找出目前 Moniker 所識別之物件的永續性儲存體,並傳回所需的介面指標。 某些類型的 Moniker 代表虛擬物件,也就是沒有自己永續性儲存體的物件。 這類物件包含其容器內部狀態的一部分,例如試算表中的儲存格範圍。 如果您的 Moniker 類別識別此類型的物件,您的 BindToStorage 實作 應該會傳回錯誤MK_E_NOSTORAGE。如果系結內容BIND_OPTS結構指定BINDFLAGS_JUSTTESTEXISTENCE旗標,則實作可以選擇在ppvObj (中傳回Null,不過您也可以忽略旗標並執行完整的系結作業) 。
實作特定附注
實作 | 備註 |
---|---|
反 Moniker | 這個方法會傳回E_NOTIMPL。 |
類別 Moniker | 這個方法會轉送到 Moniker 的 BindToObject類別。 |
檔案 Moniker | 這個方法會開啟 Moniker 所代表之路徑所指定的檔案,並傳回該檔案的 IStorage 指標。 方法僅支援系結至IStorage介面;如果在riid中要求IStream或ILockBytes,此方法會傳回E_UNSPEC,如果要求其他介面,則此方法會傳回E_NOINTERFACE。 除非 pmkToLeft 是一個類別 Moniker, 否則 pmkToLeft 應該是 Null,如同 IMoniker::BindToObject的實作一樣。 |
泛型複合 Moniker | 這個方法會以遞迴方式在複合最右邊的元件上呼叫 BindToStorage ,並將複合的其餘部分當做該呼叫的 pmkToLeft 參數傳遞。 |
專案 Moniker | 如果 pmkToLeft 為 Null,此方法會傳回E_INVALIDARG。 否則,方法會在pmkToLeft參數上呼叫IMoniker::BindToObject,要求IOleItemContainer介面指標。 方法接著會針對要求的介面呼叫 IOleItemContainer::GetObjectStorage 。 |
OBJREF Moniker | 這個方法會取得包含執行中物件之儲存體上所要求介面的封送處理指標。 因為 OBJREF Moniker 代表執行中的物件,所以不會執行任何啟用。 如果表示的物件不再執行, BindToStorage 會因為E_UNEXPECTED而失敗。 |
指標 Moniker | 這個方法會查詢所要求介面的包裝指標。 |
URL Moniker |
URL Moniker 的系統實作支援 BindToStorage ,用於所有 URL 上的資料流程物件,以及儲存物件,以防指定的資源是複合檔案。
因為 URL Moniker 支援非同步系結,所以 其 BindToStorage 的實際傳回值可能會因系結內容中建立的物件參數而有所不同。 不過,不論同步或非同步使用方式為何,系結作業的語意都相同,如下所示:
|
規格需求
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
目標平臺 | Windows |
標頭 | objidl.h |