IMoniker 介面 (objidl.h)
可讓您使用Moniker物件,其中包含可唯一識別 COM 物件的資訊。 具有 Moniker物件IMoniker 介面指標的物件,可以尋找、啟用和取得所識別物件的存取權,而不需要任何其他特定資訊,該對象實際上位於分散式系統中。
Monikers 是用來作為 COM 中鏈接的基礎。 鏈接物件包含識別其來源的Moniker。 當使用者啟動連結的對象進行編輯時,Moniker 會系結;這會將連結來源載入記憶體。
繼承
IMoniker 介面繼承自 IPersistStream。 IMoniker 也有下列類型的成員:
方法
IMoniker 介面具有這些方法。
IMoniker::BindToObject 系結至指定的物件。 系結程式牽涉到尋找對象、視需要將其放入執行中狀態,以及為呼叫端提供所識別物件上指定介面的指標。 |
IMoniker::BindToStorage 系結至指定物件的記憶體。 不同於 IMoniker::BindToObject 方法,這個方法不會啟用 Moniker 所識別的物件。 |
IMoniker::CommonPrefixWith 根據這個Moniker與指定Moniker通用的前置詞,建立新的Moniker。 |
IMoniker::ComposeWith 藉由結合目前的Moniker與指定的Moniker,建立新的複合Moniker。 |
IMoniker::Enum 擷取複合Moniker元件之列舉值的指標。 |
IMoniker::GetDisplayName 擷取Moniker的顯示名稱。 |
IMoniker::GetTimeOfLastChange 擷取這個Moniker上次變更所識別物件的時間。 |
IMoniker::Hash 使用 Moniker 的內部狀態建立哈希值。 |
IMoniker::Inverse 建立此 Moniker 的反轉 Moniker。 當這個Moniker或其中一個類似的結構右邊撰寫時,Moniker會撰寫為無內容。 |
IMoniker::IsEqual 判斷這個Moniker是否與指定的Moniker相同。 |
IMoniker::IsRunning 判斷此Moniker所識別的物件目前是否已載入並執行。 |
IMoniker::IsSystemMoniker 判斷這個Moniker是否為其中一個系統提供的Moniker類別。 |
IMoniker::P arseDisplayName 將顯示名稱轉換成Moniker。 |
IMoniker::Reduce 將Moniker減少為最簡單的形式。 |
IMoniker::RelativePathTo 在此Moniker與指定的Moniker之間建立相對Moniker。 |
備註
如同檔案系統中檔案的路徑,Moniker 包含可讓 COM 物件找到並啟用的資訊。 Monikers 可以識別任何類型的 COM 物件,從儲存在檔案中的檔物件到內嵌物件內的選取範圍。 COM 提供一組Moniker類別,可讓您建立Moniker物件,以識別系統中最常找到的物件。 例如,可能有物件代表電子表格中內嵌在儲存在檔案中的文字檔中的儲存格範圍。 在分散式系統中,此物件的Moniker會識別物件系統的位置、該系統上的檔案實體位置、該檔案內的內嵌物件的儲存位置,最後是內嵌物件內單元格範圍的位置。
Moniker 物件支援 IMoniker 介面,其衍生自 IPersistStream 介面,並唯一識別系統中的單一物件。 提供Moniker的物件建立Moniker對象之後,就無法在該物件內變更這項資訊。 如果Moniker提供者變更資訊,它只能藉由建立新的Moniker對象來執行這項操作,然後唯一識別有問題的物件。
Monikers 具有下列兩個重要功能:
- Monikers 可以儲存至永續性記憶體。 當 Moniker 載入回記憶體時,它仍會識別相同的物件。
- Monikers 支援稱為系結的作業,這是尋找Moniker所命名之物件的程式、啟用它 (載入記憶體) 如果尚未使用中,並將指標傳回至該物件上要求的介面。
反Moniker實作
反Monikers是檔案、專案和指標Monikers之 COM實作的反轉。 也就是說,由檔案Moniker、專案Moniker或指標Moniker撰寫的反Moniker撰寫為 nothing。如果您是Moniker用戶端,您通常不需要使用反Monikers。 當您需要Moniker的反向時,您應該呼叫 IMoniker::Inverse。 例如,如果您需要反向移除複合Moniker的最後一個片段,請使用 IMoniker::Enum列舉Moniker 的片段,並在最右邊的片段上呼叫 Inverse 。 您不應該針對此目的使用反Moniker,因為您無法確定複合最右邊的部分會將反Moniker視為反轉。
唯一您應該明確使用反Moniker的情況是當您撰寫新的Moniker類別,而且您不需要針對Moniker建構反向。 在此情況下,您可以從 Inverse 實作傳回反 Monikers。 在 IMoniker::ComposeWith 實作中,您應該接著針對您遇到的每一個反 Moniker,將其中一個 Moniker 刪除。
使用 CreateAntiMoniker 函式來建立這些 Monikers。
類別Moniker實作
類別Monikers是代表物件類別的Monikers。 類別Monikers系結至建立類別的類別物件。類別Monikers最適合與其他類型Moniker組合,例如檔案Monikers或專案Monikers。 類別Monikers也可能由支持系結至 IClassActivator 介面的Monikers右側組成。 這可讓 IClassActivator 存取 類別對象和 類別的實例。
若要使用類別 Monikers,您必須使用 CreateClassMoniker 函式來建立這些 Monikers。
檔案Moniker實作
檔案Monikers是代表文件系統中路徑的Monikers;檔案Moniker可以識別儲存在其本身檔案中的任何物件。 若要識別檔案中包含的物件,您可以撰寫其他類別的Monikers (例如,檔案Moniker右邊的專案Monikers) 。 不過,複合內檔案Moniker左邊的Moniker必須是另一個檔案Moniker、反Moniker或類別Moniker或類別Moniker。 例如,專案Moniker在複合中出現在檔案Moniker左邊是不合法的。請注意,反Moniker是整個檔案Moniker的反轉,而不是Moniker所代表之路徑元件的反轉;也就是說,當您在檔案Moniker右邊撰寫反Moniker時,會移除整個檔案Moniker。 如果您想要只移除檔案 Moniker 所代表路徑最右邊的元件,您必須根據 “..” 路徑建立個別檔案 Moniker,然後將它撰寫到檔案 Moniker 的結尾。
使用Moniker取得物件介面指標的Moniker用戶端 (通常不需要知道Moniker的類別) ;它只能使用 IMoniker 介面指標呼叫方法。
Moniker 提供者 (傳出識別其物件的Moniker,讓Moniker客戶端能夠存取這些物件,) 如果識別的物件儲存在檔案中,則必須使用檔案Monikers。 如果每個物件都位於自己的檔案中,檔案Monikers是唯一所需的類型。 如果識別的物件小於檔案,則除了檔案Monikers之外,您還需要使用另一種類型的Moniker (,除了檔案Monikers之外,還需要使用item Monikers) 。
若要使用檔案 Monikers,您必須使用 CreateFileMoniker 函式來建立 Monikers。 若要允許在系結檔案Moniker時載入物件,您的對象必須實作 IPersistFile 介面。
Moniker 提供者最常見的範例是支持連結的 COM 伺服器應用程式。 如果您的 COM 伺服器應用程式只支援將其完整連結至檔案型檔,檔案 Monikers 是您唯一需要的 Moniker 類型。 如果您的 COM 伺服器應用程式支援連結至小於檔案 (的物件,例如檔區段或內嵌物件) ,您必須使用專案 Monikers 以及檔案 Monikers。
泛型複合Moniker實作
泛型複合Moniker是複合Moniker,其元件彼此沒有特殊知識。組合是將兩個Monikers聯結在一起的程式。 有時候,特定類別的兩個Moniker可以特殊方式合併;例如,代表不完整路徑的檔案Moniker,以及代表相對路徑的另一個檔案Moniker可以合併成代表完整路徑的單一檔案Moniker。 這是非泛型組合的範例。 另一方面,一般組合可以連接任何兩個Moniker,不論其類別為何。 由於非一般組合取決於涉及的Monikers類別,因此只能由特定類別的 IMoniker::ComposeWith 方法實作來執行。 如果您撰寫新的Moniker類別,則可以定義新的非泛型組合類型。 相較之下, CreateGenericComposite 函式會執行泛型組合。
使用Moniker取得) 物件介面指標的Moniker用戶端 (通常不需要知道Moniker的類別,或它是泛型復合還是非泛型複合;它只能使用 IMoniker 介面指標呼叫方法。
Moniker 提供者 (傳出Moniker,以識別其物件,使其可供Moniker用戶端存取,) 可能需要將兩個Moniker組合在一起。 (例如,如果您使用專案Moniker來識別物件,您必須先使用識別物件的容器的Moniker來撰寫它,再將它送出。) 使用 IMoniker::ComposeWith 方法來執行此動作,在第一個Moniker上呼叫方法,並將第二個Moniker傳遞為參數;這個方法可能會產生泛型或非泛型複合。
當您撰寫自己的Moniker類別時,唯一應該明確建立泛型複合Moniker的時間。 在 IMoniker::ComposeWith 的實作中,您應該儘可能嘗試執行非一般組合;如果您無法執行非泛型組合且泛型組合是可接受的,您可以呼叫 CreateGenericComposite 函式來建立泛型複合 Moniker。
專案Moniker實作
專案Monikers可用來識別容器內的物件,例如檔的一部分、複合檔內的內嵌物件,或電子表格內的單元格範圍。 專案Moniker通常與檔案Monikers搭配使用;檔案Moniker可用來識別容器,而專案Moniker則用來識別容器內的專案。專案Moniker包含文字字串;容器物件會使用此字串來區別自主專案與其他專案。 容器對象必須實作 IOleItemContainer 介面;這個介面可讓專案Moniker程式代碼取得物件的指標,前提是只有識別物件的字串。
使用Moniker取得物件介面指標的Moniker用戶端 (通常不需要知道Moniker的類別) ;它只會使用 IMoniker 介面指標呼叫方法。
moniker 提供者 (傳出Monikers,以識別其物件,使其可供Moniker用戶端存取,) 如果識別的物件包含在另一個物件內,則必須使用專案Monikers,而且可以使用字元串個別識別。 例如,使用另一種類型的Moniker (,檔案Monikers) 來識別容器物件。
若要使用專案 Monikers,您必須使用 CreateItemMoniker 函式來建立 Monikers。 若要允許在系結專案Moniker時載入物件,物件容器必須實作 IOleItemContainer 介面。
Moniker 提供者最常見的範例是支持連結的 COM 應用程式。 如果您的 COM 應用程式支援連結至小於檔案檔案的物件,您需要使用專案 Monikers。 對於允許連結至檔內選取範圍的伺服器應用程式,您可以使用專案Monikers來識別這些物件。 對於允許連結至內嵌物件的容器應用程式,您可以使用專案Monikers來識別內嵌物件。
OBJREF Moniker 實作
OBJREF Monikers 代表在本機或遠端於進程外伺服器上執行之物件實例的參考。 Moniker 會識別物件實例,以及物件執行所在的計算機。OBJREF Moniker 與指標 Moniker 類似,不同之處在於執行中的物件是跨進程。 用戶端可以在 OBJREF Moniker 上呼叫 IMoniker::BindToObject ,並使用它取得的指標來存取執行中的物件,不論其位置為何。
指標 Moniker 的重要區別在於,OBJREF Moniker 的顯示名稱可以內嵌在 HTML 頁面中,而 Moniker 所代表的執行物件可以由用戶端腳本、applet 或 ActiveX 控件系結。
OBJREF Moniker 的主要用途是透過因特網取得執行中對象實例的存取權。 使用中伺服器頁面或其他產生動態 HTML 內容的方法會將 OBJREF Moniker 的顯示名稱放在小程式或 ActiveX 控件的參數中。 Applet 或控件的程式代碼會呼叫 CreateObjrefMoniker 函式,根據顯示名稱建立 OBJREF Moniker,然後在產生的 OBJREF Moniker 上呼叫 IMoniker::BindToObject ,以取得執行中對象實例的存取權。 使用中伺服器頁面接著會將執行中物件的指標封送處理回頁面的用戶端。
指標 Moniker 實作
指標 Moniker 基本上會包裝介面指標,使其看起來像 Moniker,而且可以傳遞至需要 Moniker 的介面。 藉由呼叫指標的 QueryInterface 方法,即可系結指標Moniker。指標 Monikers 的實例拒絕串行化;也就是說, IPersistStream::Save 會傳回錯誤。 不過,這些Monikers可以在 RPC 呼叫中封送處理至不同的進程;在內部,系統會使用封送處理介面指標的標準範例來封送處理和取消封送處理指標。
很少需要指標 Moniker。 只有在您需要Monikers來識別沒有持續性表示的物件時,才使用指標Monikers。 指標 Monikers 允許這類物件參與Moniker系結作業。
URL Moniker 實作
IMoniker 的 URL Moniker 實作位於 URL Moniker 物件上,它也支援 IUnknown 和 IAsyncMoniker 介面。 IMoniker 介面會從 IPersistStream 和 IUnknown 繼承其定義,而 IPersistStream 繼承自 IPersist。 因此, IMoniker 實作包含 IPersistStream 和 IPersist 的支援。IAsyncMoniker 介面只是 IUnknown。 (沒有任何其他方法。) 它用來允許客戶端判斷Moniker是否支援異步系結。
若要在此物件上取得 IMoniker 介面的指標,請呼叫 CreateURLMonikerEx 函式。
使用Moniker取得物件介面指標的Moniker用戶端 (,) 通常不需要知道它所使用的Moniker類別;它只會使用 IMoniker 介面指標呼叫方法。
moniker 提供者 (傳出Moniker,以識別其物件,使其可供Moniker用戶端存取,) 如果識別的物件包含在另一個物件內,而且可以使用字元串個別識別。 它也需要使用另一種類型的Moniker (,例如檔案Monikers) 來識別容器物件。
若要使用專案 Monikers,您必須使用 CreateItemMoniker 函式來建立 Monikers。 若要允許在系結專案Moniker時載入物件,物件容器必須實作 IOleItemContainer 介面。
Moniker 提供者最常見的範例是支持連結的 COM 應用程式。 如果您的 COM 應用程式支援連結至小於檔案檔案的物件,您需要使用專案 Monikers。 對於允許連結至檔內選取範圍的伺服器應用程式,您可以使用專案Monikers來識別這些物件。 對於允許連結至內嵌物件的容器應用程式,您可以使用專案Monikers來識別內嵌物件。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows 2000 Server [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | objidl.h |