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


Использование примеров кода пакета SDK для формата Windows Media

[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей функцией.] Он был заменен средствами чтения источника и средствами записи приемника . средства чтения источников и записи приемника оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует при написании нового кода использовать Source Reader и Sink Writer вместо Windows Media Format 11 SDK, если это возможно. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие 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 со ссылкой на соответствующий пример кода.

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

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