Поделиться через


Использование примеров кода пакета 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 со ссылкой на соответствующий пример кода.

  • Чтобы упростить чтение кода, ни одна из примеров функций в этой документации не проверяет входные параметры. При копировании любой из этих функций в код следует проверить все входные параметры.

начало работы