Grundlagen der Anwendung

Es gibt einige zusätzliche Verarbeitungen, die Sie für jede Anwendung ausführen müssen, die die erweiterten Windows Media DRM-Client-APIs verwendet. In diesem Thema werden die Anforderungen für eine einfache Anwendung beschrieben.

Zunächst müssen Sie die erweiterten Windows Media DRM-Client-APIs initialisieren, indem Sie die WMDRMStartup-Funktion aufrufen. Die Objekte des SDK sind COM-Objekte, Sie müssen jedoch CoIntialize nicht aufrufen, da die WMDRMStatup-Funktion COM für Sie initialisiert.

Hinweis

Das Windows Media Format SDK verwendet nur eine Teilmenge von COM. Wenn Sie also andere COM-Objekte als die in der erweiterten API des Windows Media DRM-Clients verwenden, müssen Sie Weiterhin CoInitialize aufrufen.

 

Alle Objekte der erweiterten Windows Media DRM-Client-APIs werden mithilfe von Hilfsfunktionen und -methoden erstellt. Sie müssen CoCreateInstance nie aufrufen, um ein -Objekt zu erstellen. Die erste Schnittstelle zum Instanziieren für jede Anwendung, die das SDK verwendet, ist IWMDRMProvider, mit dem Sie alle anderen Basisschnittstellen instanziieren können. Um eine instance von IWMDRMProvider zu erhalten, müssen Sie entweder WMDRMCreateProvider oder WMDRMCreateProtectedProvider aufrufen. Der Unterschied zwischen diesen Funktionen besteht darin, dass WMDRMCreateProvider ein Objekt erstellt, das wiederum nur Objekte erstellen kann, die keine Methoden unterstützen, die die Stubbibliothek erfordern.

Nachdem Sie über eine instance von IWMDRMProvider verfügen, können Sie die anderen benötigten Objekte erstellen, indem Sie IWMDRMProvider::CreateObject aufrufen.

Wenn Sie bereit sind, Ihre Anwendung zu beenden, müssen Sie die DRM-Subsystemressourcen freigeben, indem Sie die WMDRMShutdown-Funktion aufrufen. Mit dieser Funktion wird auch COM für Sie heruntergefahren.

Im folgenden Codebeispiel wird veranschaulicht, wie Eine Anwendung initialisiert und abgeschlossen wird, die die erweiterten Windows Media DRM-Client-APIs verwendet.

#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();
}

Erste Schritte