應用程式基本概念

您必須針對使用 Windows Media DRM 用戶端擴充 API 的任何應用程式執行一些額外的處理。 本主題描述簡單應用程式的需求。

首先,您必須呼叫 WMDRMStartup 函式來初始化 Windows Media DRM 用戶端擴充 API。 SDK 的物件是 COM 物件,但您不需要呼叫 CoIntialize,因為 WMDRMStatup 函式會為您初始化 COM。

注意

Windows 媒體格式 SDK 只會使用 COM 子集,因此如果您使用 Windows Media DRM 用戶端擴充 API 中以外的 COM 物件,您仍必須呼叫 CoInitialize

 

Windows Media DRM 用戶端擴充 API 的所有物件都是使用協助程式函式和方法來建立。 您永遠不需要呼叫 CoCreateInstance 來建立物件。 針對任何使用 SDK 的應用程式具現化的第一個介面是 IWMDRMProvider,您可以使用它來具現化所有其他基底介面。 若要取得 IWMDRMProvider的實例,您必須呼叫 WMDRMCreateProviderWMDRMCreateProtectedProvider。 這些函式之間的差異在於 WMDRMCreateProvider 會 建立物件,而該物件接著只會建立不支援需要存根程式庫之方法的物件。

擁有 IWMDRMProvider的實例之後,您可以呼叫 IWMDRMProvider::CreateObject來建立您需要的其他物件。

當您準備好結束應用程式時,您必須呼叫 WMDRMShutdown 函式來釋放 DRM 子系統資源。 此函式也會為您關閉 COM。

下列程式碼範例示範如何初始化及結束使用 Windows Media DRM 用戶端擴充 API 的應用程式。

#include <wmdrmsdk.h>
// TODO: Include other headers here as needed.

// This example demonstrates the code required in a single, simple
// main function. You will most likely break this code up into appropriate
// functions.
void main(void)
{
    HRESULT hr = S_OK;

    IWMDRMProvider*     pProvider     = NULL;
    // For the sake of example, this code will instantiate the
    //  IWMDRMLicenseQuery interface. The process is the same for the
    //  other base interfaces.
    IWMDRMLicenseQuery* pLicenseQuery = NULL;

    // Initialize the DRM subsystem.
    hr = WMDRMStartup();

    // Create a provider object, that can be used to create the other
    //  objects.
    if (SUCCEEDED(hr))
    {
        hr = WMDRMCreateProvider(&pProvider);
    }

    if(SUCCEEDED(hr))
    {
        hr = pProvider->CreateObject(
            IID_IWMDRMLicenseQuery, 
            (void**)&pLicenseQuery);
    }

    // TODO: Use the methods of IWMDRMLicenseQuery as required.

    // Cleanup and shutdown.
    SAFE_RELEASE(pLicenseQuery);
    SAFE_RELEASE(pProvider);

    hr = WMDRMShutdown();
}

快速入門