IMoniker::P arseDisplayName 方法 (objidl.h)

將顯示名稱轉換成Moniker。

語法

HRESULT ParseDisplayName(
  [in]  IBindCtx *pbc,
  [in]  IMoniker *pmkToLeft,
  [in]  LPOLESTR pszDisplayName,
  [out] ULONG    *pchEaten,
  [out] IMoniker **ppmkOut
);

參數

[in] pbc

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

[in] pmkToLeft

Moniker 上 IMoniker 介面的指標,此介面已從顯示名稱內建到此點為止。

[in] pszDisplayName

要剖析的其餘顯示名稱。

[out] pchEaten

變數的指標,這個變數會接收此步驟中已取用的 pszDisplayName 字元數。

[out] ppmkOut

IMoniker 指標變數的指標,會接收從 pszDisplayName 建置之 Moniker 的介面指標。 成功時,實作必須在新的Moniker上呼叫 AddRef ;呼叫者必須負責呼叫 Release。 如果發生錯誤,實作會將 *ppmkOut 設定為 NULL

傳回值

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

傳回碼 描述
S_OK
已成功完成剖析作業。
MK_E_SYNTAX
輸入元件的語法錯誤, (pmkToLeft、此 Moniker 和 pszDisplayName) 。 例如,如果 pmkToLeft 為非 NULL,檔案 Moniker 會傳回此錯誤,如果 pmkToLeftNULL,則專案 Moniker 會傳回此錯誤。
 

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

備註

來電者的附註

Moniker 用戶端通常不會直接呼叫 ParseDisplayName 。 相反地,他們會在想要將顯示名稱轉換成Moniker (時呼叫 MkParseDisplayName 函式,例如,在實作容器應用程式的 [ 連結 ] 對話框中,或實作支援檔外部對象的參考的宏語言) 。 該函式會先剖析顯示名稱本身的初始部分。

然後它會在剛建立的Moniker上呼叫 ParseDisplayName ,並傳遞顯示名稱的其餘部分,並在傳回時取得新的Moniker;此步驟會重複執行,直到剖析整個顯示名稱為止。

實作者的注意事項

如果您的Moniker類別設計為只指定特定類型的物件,您的實作可能會自行執行此剖析。 否則,您必須取得Moniker-so-far (所識別物件的 IParseDisplayName 介面指標,也就是 pmkToLeft 和這個 Moniker 的組合) ,然後傳回呼叫 IParseDisplayName::P arseDisplayName 的結果。

取得 IParseDisplayName 指標有不同的策略,如下所示:

系結的任何物件都應該向系結內容註冊 (請參閱 IBindCtx::RegisterObjectBound) ,以確保它們在剖析作業期間持續執行。

實作特定附注

實作 備註
反Moniker 這個方法會傳回E_NOTIMPL。
類別Moniker 此方法會藉由系結至 IParseDisplayName 本身來剖析顯示名稱,並要求系結物件將顯示名稱剖析成 Moniker,如下所示。
  hr = BindToObject(pbc, pmkToLeft, IID_IParseDisplayName, (void**)&ppdn);
  if (SUCCEEDED(hr)) {
    hr = ppdn->ParseDisplayName(pbc, lpszDisplayName, pchEaten, ppmkOut);
    ppdn->Release();
  }
  return hr;

此方法會嘗試取得 IParseDisplayName 指標,首先系結至 Moniker 所識別物件的類別處理站,然後系結至物件本身。 如果其中一個系結作業成功,檔案Moniker會將顯示名稱的未剖析部分傳遞給 IParseDisplayName::P arseDisplayName 方法。

如果 pmkToLeft 為非 NULL,這個方法會傳回MK_E_SYNTAX。

檔案Moniker 此方法會嘗試取得 IParseDisplayName 指標,首先系結至 Moniker 所識別物件的類別處理站,然後系結至物件本身。 如果其中一個系結作業成功,檔案Moniker會將顯示名稱的未剖析部分傳遞給 IParseDisplayName::P arseDisplayName 方法。
泛型複合Moniker 這個方法會以遞歸方式在複合的最右邊元件上呼叫 IMoniker::P arseDisplayName ,傳遞所有其他專案做為該呼叫的 pmkToLeft 參數。
專案Moniker 如果 pmkToLeftNULL,這個方法會傳回MK_E_SYNTAX。 否則,方法會在 pmkToLeft 參數上呼叫 IMoniker::BindToObject,要求 IOleItemContainer 介面指標。 方法接著會呼叫 IOleItemContainer::GetObject,要求 Moniker 所識別物件的 IParseDisplayName 介面指標,並將顯示名稱傳遞至 IParseDisplayName::P arseDisplayName
OBJREF Moniker 如果 pmkToLeft 不是 NULL,這個方法會傳回MK_E_SYNTAX。
指標 Moniker 此方法會查詢 IParseDisplayName 介面的包裝指標,並將顯示名稱傳遞至 IParseDisplayName::P arseDisplayName
URL Moniker 將完整或部分 URL 字串剖析為結果 Moniker (ppmkOut) 。 如果 szDisplayName 代表完整的 URL 字串 (例如 “http://foo.com/default.html”) ,結果就是新的完整 URL Moniker。 如果 szDisplayName 代表部分 URL 字串 (例如 “..\default.html“) ,結果是完整 URL,其內容取自系結內容的SZ_URLCONTEXT對象參數或來自此 URL Moniker。 例如,如果內容 Moniker 是 “http://foo.com/pub/list.html”, 而 szDisplayName 是 “..\default.html」,產生的URL Moniker 會代表“http://foo.com/default.html”。

規格需求

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

另請參閱

IMoniker

IParseDisplayName

MkParseDisplayName