Основные сведения о приложениях
Существует дополнительная обработка, которую необходимо выполнить для любого приложения, использующего расширенные API клиента DRM Windows Media. В этом разделе описываются требования к простому приложению.
Сначала необходимо инициализировать расширенные API клиента DRM Windows Media, вызвав функцию WMDRMStartup . Объекты пакета SDK являются COM-объектами, но вызывать CoIntialize не нужно, так как функция WMDRMStatup инициализирует COM.
Примечание
Пакет SDK для формата Windows Media использует только подмножество COM, поэтому при использовании COM-объектов, отличных от объектов в расширенном API клиента DRM Windows Media, необходимо по-прежнему вызывать CoInitialize.
Все объекты расширенных API клиента DRM Windows Media создаются с помощью вспомогательных функций и методов. Для создания объекта не нужно вызывать CoCreateInstance . Первым интерфейсом для создания экземпляра для любого приложения, использующего пакет SDK, является IWMDRMProvider, который можно использовать для создания экземпляров всех остальных базовых интерфейсов. Чтобы получить экземпляр IWMDRMProvider, необходимо вызвать WMDRMCreateProvider или WMDRMCreateProtectedProvider. Разница между этими функциями заключается в том, что WMDRMCreateProvider создает объект, который, в свою очередь, может создавать только объекты, которые не поддерживают методы, требующие библиотеки заглушки.
После создания экземпляра IWMDRMProvider можно создать другие необходимые объекты, вызвав IWMDRMProvider::CreateObject.
Когда вы будете готовы выйти из приложения, необходимо освободить ресурсы подсистемы DRM, вызвав функцию WMDRMShutdown . Эта функция также завершает работу COM.
В следующем примере кода показано, как инициализировать и завершить приложение, использующее расширенные API клиента DRM Windows Media.
#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();
}
Связанные темы