MkParseDisplayName 函式 (objbase.h)

將字串轉換成Moniker,以識別字串所命名的物件。

此函式是 IMoniker::GetDisplayName 作業的反轉,它會擷取與 Moniker 相關聯的顯示名稱。

語法

HRESULT MkParseDisplayName(
  [in]  LPBC      pbc,
  [in]  LPCOLESTR szUserName,
  [out] ULONG     *pchEaten,
  [out] LPMONIKER *ppmk
);

參數

[in] pbc

系結內容物件上要用於這個系結作業之 IBindCtx 介面的指標。

[in] szUserName

要剖析之顯示名稱的指標。

[out] pchEaten

已取用 之 szUserName 字元數的指標。 如果函式成功,*pch要szUserName 的長度;否則,這是已成功剖析的字元數。

[out] ppmk

IMoniker* 指標變數的位址,該變數會接收從 szUserName 建置之 Moniker 的介面指標。 成功時,函式已在Moniker上呼叫 AddRef ,而呼叫端負責呼叫 Release。 如果發生錯誤,指定的介面指標將包含方法在發生錯誤之前能夠建立的大部分Moniker。

傳回值

此函式可以傳回標準傳回值E_OUTOFMEMORY,以及下列值。

傳回碼 描述
S_OK
剖析作業成功,且已建立Moniker。
MK_E_SYNTAX
檔名的語法錯誤,或所產生複合Moniker語法中的錯誤。
 

此函式也可以傳回 IMoniker::BindToObjectIOleItemContainer::GetObjectIParseDisplayName::P arseDisplayName 所傳回的任何錯誤值。

備註

MkParseDisplayName 函式會將人類可讀取的名稱剖析為Moniker,可用來識別連結來源。 產生的Moniker可以是簡單的Moniker (,例如檔案Moniker) ,也可以是由元件Moniker片段組成的泛型複合。 例如,顯示名稱 “c:\mydir\somefile!item 1”

可以剖析成下列泛型複合Moniker:以 「c:\mydir\somefile」 為基礎的 FileMoniker ) + (ItemMoniker,以 “item 1” ) 為基礎。

MkParseDisplayName 最常見的用法是在標準 [連結] 對話框的實作中,可讓使用者輸入字串來指定連結物件的來源。 如果您的應用程式支援允許遠程參考 (檔案外部元素的參考) ,您可能也需要呼叫 MkParseDisplayName

剖析顯示名稱通常需要啟動在系結作業期間啟動的相同物件,因此在效能) 為系結方面,其成本可能就如同昂貴的 (。 剖析作業期間系結的物件會在傳遞至函式的系結內容中快取。 如果您打算系結 MkParseDisplayName 傳回的 Moniker,最好在函式傳回之後立即使用相同的系結內容來執行此動作,這可移除第二次啟動物件的需求。

MkParseDisplayName 會剖析與Moniker一樣多的顯示名稱。 然後函式會在新建立的Moniker上呼叫 IMoniker::P arseDisplayName ,並傳遞顯示名稱的其餘部分。 ParseDisplayName 傳回的 Moniker 會撰寫到現有 Moniker 的結尾,而且,如果有任何顯示名稱保持未剖析,則會在組合的結果上呼叫 ParseDisplayName。 此程式會重複執行,直到剖析整個顯示名稱為止。

MkParseDisplayName 會嘗試使用成功的第一個策略來剖析顯示名稱的開頭:

  1. 函式會在執行對象數據表中尋找對應至僅包含有效檔名字符之顯示名稱的所有前置詞的檔案Monikers。 此策略可以識別尚未儲存的檔。
  2. 函式會檢查顯示名稱的最大前置詞,此名稱僅包含有效的檔名字符,以查看 OLE 1 檔是否以該名稱註冊。 在此情況下,傳回的Moniker是 OLE 2 的 OLE 1 相容性層所提供的內部Moniker。
  3. 函式會查閱檔系統,以檢查顯示名稱的前置詞是否符合現有的檔案。 檔名可以是磁碟驅動器絕對、磁碟驅動器相對、工作目錄相對,或以明確的網路共用名稱開頭。 這是常見的情況。
  4. 如果顯示名稱的初始字元為 『@』,函式會緊接在符合合法 ProgID 語法的後面尋找最長字串。 函式會使用 CLSIDFromProgID 函式,將此字串轉換成 CLSID。 如果 CLSID 代表 OLE 2 類別,函式會載入對應的類別物件,並要求 IParseDisplayName 介面指標。 然後,產生的 IParseDisplayName 介面會提供整個字串來剖析,從 '@' 開始。 如果 CLSID 代表 OLE 1 類別,則函式會將 ProgID 後面的字串視為具有 檔名|專案 語法的 OLE1/DDE 連結指示項。

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows 2000 Server [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 objbase.h
程式庫 Ole32.lib
Dll Ole32.dll
API 集合 ext-ms-win-com-ole32-l1-1-1 (於 Windows 8.1)

另請參閱

IMoniker::GetDisplayName

IMoniker::P arseDisplayName

IParseDisplayName