应用程序基础知识
对于使用 Windows Media DRM 客户端扩展 API 的任何应用程序,必须执行一些额外的处理。 本主题介绍简单应用程序的要求。
首先,必须通过调用 WMDRMStartup 函数初始化 Windows Media DRM 客户端扩展 API。 SDK 的对象是 COM 对象,但你不需要调用 CoIntialize,因为 WMDRMStatup 函数会为你初始化 COM。
注意
Windows Media Format SDK 仅使用 COM 的子集,因此,如果使用的 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();
}
相关主题