專案 Monikers

另一個 OLE 實作的 Moniker 類別是專案 Moniker,可用來識別另一個物件中包含的物件。 其中一種自主物件是內嵌在複合檔案中的 OLE 物件。 複合檔案可以藉由指派任意名稱來識別它所包含的内嵌物件,例如 「embedobj1」、「embedobj2」 等等。 另一種類型的自主物件是檔中的使用者選取專案,例如試算表中的儲存格範圍或文字檔中的字元範圍。 由選取範圍組成的物件稱為 虛擬物件 ,因為它在使用者標示選取範圍之前不會被視為不同的物件。 試算表可能會使用 「1A:7F」 之類的名稱來識別儲存格範圍,而文字處理檔可能會使用書簽的名稱來識別字元範圍。

專案 Moniker 主要適用于串連或 撰寫另一個識別容器的 Moniker。 通常會建立專案 Moniker,然後撰寫到 (,例如,) 檔案 Moniker 來建立與物件的完整路徑相等。 例如,您可以撰寫 moniker 「c:\work\report.doc」 檔案 (,以識別容器物件) 專案 Moniker 「embedobj1」 (,其中識別容器內的物件) ,以形成 moniker 「c:\work\report.doc\embedobj1」,它會唯一識別特定檔案中的特定物件。 您也可以串連其他專案 Monikers 來識別深層巢狀物件。 例如,如果 「embedobj1」 是試算表物件的名稱,若要識別該試算表物件中的特定儲存格範圍,您可以附加另一個專案 Moniker 來建立與 「c:\work\report.doc\embedobj1\1A:7F」 相等的 Moniker。

與檔案 Moniker 結合時,專案 Moniker 會形成完整的路徑。 專案 Monikers 因此會將路徑名稱的概念延伸到檔案系統之外,定義路徑名稱來識別個別物件,而不只是檔案。

專案 Moniker 與檔案 Moniker 之間有顯著的差異。 檔案 Moniker 中包含的路徑對了解檔案系統的任何人而言有意義,而專案 Moniker 中包含的部分路徑只對特定容器有意義。 每個人都知道「c:\work\report.doc」指的是什麼,但只有一個特定容器物件知道「1A:7F」 所參考的內容。 一個容器無法解譯另一個應用程式所建立的專案 Moniker;唯一知道專案 Moniker 所參考物件的容器是第一次將專案 Moniker 指派給物件的容器。 基於這個理由,由檔案和專案 Moniker 組合所命名的物件來源不僅必須實作 IPersistFile,也有助於將檔案 Moniker 系結至 IOleItemContainer ,以協助將專案 Moniker 的名稱解析為檔案內容中的適當物件。

Moniker 的優點是使用 Moniker 尋找物件的人不需要瞭解專案 Moniker 中包含的名稱,只要專案 Moniker 是複合專案的一部分。 一般而言,專案 Moniker 本身就不合理。 相反地,您會將專案 Moniker 撰寫至檔案 Moniker。 接著,您會在複合上呼叫 IMoniker::BindToObject ,以系結其中的個別 Moniker,並解譯名稱。

若要建立專案 Moniker 物件,並傳回其指向 Moniker 提供者的指標,OLE 會提供 Helper 函式 CreateItemMoniker。 此函式會建立專案 Moniker 物件,並將其指標傳回給提供者。

反 Monikers

類別 Monikers

複合 Monikers

檔案 Monikers

指標 Monikers