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 中傳回。 通常要求的記憶體介面包括 IStorageIStreamILockBytes

[out] ppvObj

接收 riid 中要求的介面指標的指標變數位址。 成功傳回時,*ppvObj 會包含Moniker所識別之物件記憶體的要求介面指標。 成功時,實作必須在記憶體上呼叫 AddRef 。 呼叫者必須負責呼叫 Release。 如果發生錯誤,*ppvObj 應該是 NULL

傳回值

這個方法可以傳回標準傳回值E_UNEXPECTED,以及下列值。

傳回碼 描述
S_OK
系結作業成功。
MK_E_NOSTORAGE
這個Moniker所識別的物件沒有它自己的記憶體。
MK_E_EXCEEDEDDEADLINE
系結作業無法在系結內容 BIND_OPTS 結構所指定的時間限制內完成。
MK_E_CONNECTMANUALLY
作業無法連線到記憶體,可能是因為網路裝置無法連線。 如需詳細資訊,請參閱 IMoniker::BindToObject
MK_E_INTERMEDIATEINTERFACENOTSUPPORTED
找到中繼物件,但不支援完成系結作業所需的介面。 例如,如果專案Moniker不支援 IOleItemContainer 介面,則會傳回此值。
STG_E_ACCESSDENIED
無法存取記憶體物件。
 

這個方法也可以傳回與 IOleItemContainer::GetObject 方法相關聯的錯誤。

備註

BindToObjectBindToStorage 方法之間有一個重要差異。 例如,如果您有識別電子表格物件的Moniker,呼叫 BindToObject 可提供電子表格物件本身的存取權,而呼叫 BindToStorage 則可讓您存取電子表格所在的儲存物件。

來電者的附註

雖然沒有任何 COM Moniker 類別在其系結作業中呼叫此方法,但可能適合在新的 Moniker 類別實作中呼叫此方法。 您可以在 BindToObject 的實作中呼叫這個方法,此實作需要 pmkToLeft 參數所識別之物件的資訊,而且可以在不啟用的情況下從物件的永續性記憶體中取得此方法。 例如,如果您的Monikers是用來識別可以啟動的物件,而不啟用其容器,您可能會發現此方法很有用。

用戶端可以讀取其Moniker識別之物件的記憶體,也可以呼叫這個方法。

實作者的注意事項

您的實作應該會找出目前Moniker所識別物件的永續性記憶體,並傳回所需的介面指標。 某些類型的Monikers代表虛擬物件,這些對像是沒有自己永續性記憶體的物件。 這類物件包含其容器內部狀態的一部分,例如電子錶格中的儲存格範圍。 如果您的Moniker類別識別此類型的物件, 則BindToStorage 的實作應該會傳回錯誤MK_E_NOSTORAGE。

如果系結內容BIND_OPTS結構指定BINDFLAGS_JUSTTESTEXISTENCE旗標,則實作可以選擇在 ppvObj (中傳回 NULL,不過您也可以忽略旗標並執行完整的系結作業) 。

實作特定附注

實作 備註
反Moniker 這個方法會傳回E_NOTIMPL。
類別Moniker 這個方法會轉送到Moniker的 BindToObject類別。
檔案Moniker 這個方法會開啟Moniker所代表路徑所指定的檔案,並傳回該檔案的 IStorage 指標。 方法僅支持系結至 IStorage 介面;如果在riid中要求IStreamILockBytes,則此方法會傳回E_UNSPEC,如果要求其他介面,則此方法會傳回E_NOINTERFACE。 除非 pmkToLeft 是類別 Moniker, 否則 pmkToLeft 應該是 NULL,如同 IMoniker::BindToObject 的實作一樣。
泛型複合Moniker 這個方法會以遞歸方式在複合的最右邊元件上呼叫 BindToStorage ,並將複合的其餘部分當做該呼叫的 pmkToLeft 參數傳遞。
專案Moniker 如果 pmkToLeftNULL,這個方法會傳回E_INVALIDARG。 否則,方法會在 pmkToLeft 參數上呼叫 IMoniker::BindToObject,要求 IOleItemContainer 介面指標。 方法接著會呼叫 要求的介面的 IOleItemContainer::GetObjectStorage
OBJREF Moniker 這個方法會取得包含執行中物件之記憶體上所要求介面的封送處理指標。 因為 OBJREF Moniker 代表執行中的物件,所以不會進行啟用。 如果表示的物件不再執行, BindToStorage 會失敗並E_UNEXPECTED。
指標 Moniker 這個方法會查詢所要求介面的包裝指標。
URL Moniker URL Monikers 的系統實作支援在所有 URL 上串流物件的 BindToStorage,以及在指定的資源是複合檔案的情況下,針對儲存物件使用 BindToStorage

因為 URL Moniker 支援異步系結,所以其 BindToStorage 的實際傳回值可能會因系結內容中建立的物件參數而有所不同。 不過,不論同步或異步使用方式為何,系結作業的語意都相同,如下所示:

規格需求

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

另請參閱

IMoniker