次の方法で共有


アプリケーションの基本

Windows Media DRM クライアント拡張 API を使用するアプリケーションに対して実行する必要がある追加の処理がいくつかあります。 このトピックでは、単純なアプリケーションの要件について説明します。

まず、 WMDRMStartup 関数を呼び出して、Windows Media DRM クライアント拡張 API を初期化する必要があります。 SDK のオブジェクトは COM オブジェクトですが、WMDRMStatup 関数によって COM が初期化されるため、CoIntialize を呼び出す必要はありません。

注意

Windows Media Format SDK では COM のサブセットのみが使用されるため、Windows Media DRM クライアント拡張 API 以外の COM オブジェクトを使用する場合は、 CoInitialize を呼び出す必要があります。

 

Windows Media DRM クライアント拡張 API のすべてのオブジェクトは、ヘルパー関数とメソッドを使用して作成されます。 オブジェクトを作成するために CoCreateInstance を呼び出す必要はありません。 SDK を使用するすべてのアプリケーションに対してインスタンス化する最初のインターフェイスは IWMDRMProvider です。これを使用して、他のすべての基本インターフェイスをインスタンス化できます。 IWMDRMProvider のインスタンスを取得するには、WMDRMCreateProvider または WMDRMCreateProtectedProvider を呼び出す必要があります。 これらの関数の違いは、 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();
}

はじめに