啟用物件
啟用物件是用來建立另一個物件的協助程式物件,與類別處理站有點類似。 啟用物件會公開 IMFActivate 介面。
啟用物件可讓您延遲建立目標物件,因為您可以按住 IMFActivate 指標而不建立目標物件。 啟用物件也可以序列化,因此用來在另一個進程中建立目標物件。 例如,啟用物件可用來將管線元件從應用程式進程封送處理至受保護的媒體路徑, (PMP) 進程。 啟用物件也會由傳回 IMFActivate 指標清單的特定列舉函式使用。 在應用程式建立目標物件之前,它可以藉由檢查啟用物件上的屬性來取得物件的相關資訊。
若要從啟用物件建立目標物件,請呼叫 IMFActivate::ActivateObject 方法。 呼叫端在使用建立的物件完成時,必須呼叫 IMFActivate::ShutdownObject 。 應用程式通常會建立啟用物件,而媒體會話會呼叫 ActivateObject。 在此情況下,媒體會話而非應用程式必須呼叫 ShutdownObject。 在其他情況下,應用程式會從媒體會話接收 IMFActivate 指標,而應用程式會呼叫 ActivateObject 和 ShutdownObject。 (例如,請參閱 如何播放受保護的媒體檔案.)
啟用物件可以有屬性,而 IMFActivate 介面會繼承 IMFAttributes 介面。 某些啟用物件會使用屬性來設定已建立的物件。 每個物件所支援的特定屬性記載于該啟用物件的建立函式參考中。 使用您從函式收到的 IMFActivate 指標來設定屬性。
針對受保護的播放,啟用物件會封送處理至 PMP 程式。 若要支援封送處理,啟用物件必須公開 IPersistStream 介面。 此外,如果 PMP 在受保護的進程中執行,啟用物件和建立的物件都必須是信任的元件。 在未受保護的進程中載入 PMP 時,這不是必要條件。
若要使用自訂管線物件 (,例如 PMP 程式內的媒體接收) ,您必須為管線物件實作啟用物件:
- 啟用物件必須公開 IMFActivate 和 IPersistStream。
- 啟用物件的 IPersist::GetClassID 方法必須傳回啟用物件的 CLSID。
- 您可以選擇性地實作IPersistStream::Save 和 IPersistStream::Load方法,以封送處理設定啟用物件所需的任何資料。
當媒體會話在 PMP 程式內載入拓撲時,它會呼叫 CoCreateInstance 來建立啟用物件的新實例。 然後它會呼叫 IMFActivate::ActivateObject 來建立管線物件。
相關主題