Использование примеров кода пакета SDK для формата Windows Media
[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей функцией. Он был заменен средством чтения исходного кода и модуля записи приемника. Средство чтения исходного кода и модуль записи приемника оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код по возможности использовал средство чтения исходного кода и модуль записи приемника вместо пакета SDK для Windows Media Format 11. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]
Многие пояснительные разделы этого пакета SDK содержат примеры кода. Примеры написаны так, чтобы они были как можно более четкими и краткими. При чтении примеров следует учитывать следующие соглашения.
Предполагается, что все примеры включают windows.h и wmsdk.h. Любые другие необходимые файлы заголовков упоминаются в пояснительном тексте.
Проверка ошибок ограничена прерыванием функции в случае возникновения ошибки. В приложении следует проверка для определенных кодов ошибок и предоставить отчеты об ошибках.
При проверке возвращаемых значений из методов или функций, возвращающих значение HRESULT , следует использовать макрос FAILED , чтобы определить, указывает ли возвращаемое значение на сбой.
HRESULT hr; hr = SomeFunction(); if (FAILED(hr)) { // Check for specific error values. }
Во многих примерах в этой документации используется макрос с именем GOTO_EXIT_IF_FAILED, который определен в следующем коде.
#ifndef GOTO_EXIT_IF_FAILED #define GOTO_EXIT_IF_FAILED(hr) if(FAILED(hr)) goto Exit; #endif
Каждая из этих функций имеет тег Exit:, после чего все интерфейсы и память, выделенные в функции, освобождаются и возвращается код ошибки, если таковой имеется.
Интерфейсы и память освобождаются в примерах кода с помощью макросов с именами SAFE_RELEASE и SAFE_ARRAY_DELETE. Эти макросы определяются в следующем коде:
#ifndef SAFE_RELEASE #define SAFE_RELEASE(x) \ if(x != NULL) \ { \ x->Release(); \ x = NULL; \ } #endif #ifndef SAFE_ARRAY_DELETE #define SAFE_ARRAY_DELETE(x) \ if(x != NULL) \ { \ delete[] x; \ x = NULL; \ } #endif
Часто необходимо включать логику одного примера в другой, чтобы пример был осмысленным. В этих случаях включается комментарий TODO со ссылкой на соответствующий пример кода.
Чтобы упростить чтение кода, ни одна из примеров функций в этой документации не проверяет входные параметры. При копировании любой из этих функций в код следует проверить все входные параметры.
Связанные темы