IOleItemContainer::GetObject 方法 (oleidl.h)

擷取指定物件的指標。

語法

HRESULT GetObject(
  [in]  LPOLESTR pszItem,
  [in]  DWORD    dwSpeedNeeded,
  [in]  IBindCtx *pbc,
  [in]  REFIID   riid,
  [out] void     **ppvObject
);

參數

[in] pszItem

所要求物件的容器名稱。

[in] dwSpeedNeeded

表示呼叫端等候取得物件的時間長度。 可能的值取自列舉 BINDSPEED

[in] pbc

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

[in] riid

所要求介面指標標識碼的參考。

[out] ppvObject

接收 riid 中所要求之介面指標的指標變數位址。 成功傳回時,*ppvObject 包含 pszItem 所命名之物件的要求介面指標。 成功時,實作必須在 *ppvObject 上呼叫 AddRef;呼叫者必須負責呼叫 Release。 如果發生錯誤,實作會將 *ppvObject 設定為 NULL

傳回值

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

傳回碼 描述
S_OK
已成功完成命令。
MK_E_EXCEEDEDDEADLINE
系結作業無法在系結內容的 BIND_OPTS 結構所指定的時間限制內完成,或是使用 dwSpeedNeeded 參數所指示的速度完成。
MK_E_NOOBJECT
參數 pszItem 不會識別此容器中的物件。
E_NOINTERFACE
要求的介面無法使用。

備註

IMoniker::BindToObject 的專案Moniker實作會呼叫此方法,並將儲存在專案Moniker內的名稱傳遞為 pszItem 參數。

實作者的注意事項

您的 IOleItemContainer::GetObject 實作應該先判斷 pszItem 是否為其中一個容器物件的有效名稱。 如果沒有,您應該傳回MK_E_NOOBJECT。

如果 pszItem 為內嵌或連結的物件命名,您的實作必須檢查 dwSpeedNeeded 參數的值。 如果值BINDSPEED_IMMEDIATE且尚未載入物件,您應該傳回MK_E_EXCEEDEDDEADLINE。 如果載入物件,您的實作應該藉由呼叫 OleIsRunning 函式) 來判斷物件是否執行 (。 如果未執行,且 dwSpeedNeeded 值BINDSPEED_MODERATE,您的實作應該會傳回MK_E_EXCEEDEDDEADLINE。 如果物件未執行且 dwSpeedNeeded BINDSPEED_INDEFINITE,您的實作應該呼叫 OleRun 函式,將物件置於執行中狀態。 然後,它可以查詢所要求介面的物件。 請注意,在查詢介面之前,請務必先執行 物件。

如果 pszItem 將虛擬物件命名為虛擬物件,則您的實作可以忽略 dwSpeedNeeded 參數,因為每當容器執行時,虛擬物件就會執行。 在此情況下,您的實作可以直接查詢要求的介面。

如果您需要有關 dwSpeedNeeded 所提供之時間限制的更具體資訊,您可以在變更參數上呼叫 IBindCtx::GetBindOptions 以取得實際的期限參數。

規格需求

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

另請參閱

IOleItemContainer