專案Monikers

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

專案Moniker主要適用於串連或 撰寫與另一個識別容器的Moniker。 專案Moniker通常會建立,然後組成至檔案Moniker,以建立物件的完整路徑的對等專案。 例如,您可以使用專案Moniker 「embedobj1」 來撰寫moniker「c:\work\report.doc」 檔案(識別容器物件),以形成Moniker 「c:\work\report.doc\embedobj1」,該檔案可唯一識別特定檔案中的特定物件。 您也可以串連其他專案 Moniker 來識別深層巢狀物件。 例如,如果 “embedobj1” 是電子錶格物件的名稱,若要識別該電子表格物件中的特定單元格範圍,您可以附加另一個專案 Moniker 來建立 moniker,其相當於 “c:\work\report.doc\embedobj1\1A:7F”。

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

專案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撰寫至檔案Moniker。 接著,您會在複合上呼叫 IMoniker::BindToObject ,以系結其中個別的 Moniker,解譯名稱。

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

反Monikers

類別Monikers

複合Monikers

檔案 Monikers

指標 Monikers