使用 Windows 媒体格式 SDK 代码示例

[与此页面关联的功能 Windows Media Format 11 SDK 是旧版功能。 它已被源读取器和接收器编写器取代。 源读取器和接收器编写器已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用源读取器和接收器编写器,而不是 Windows Media Format 11 SDK。 如果可能,Microsoft 建议重写使用旧 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 注释,并引用相应的代码示例。

  • 为了使代码更易于阅读,本文档中没有任何示例函数会验证其输入参数。 如果将这些函数中的任何一个复制到代码中,则应验证任何输入参数。

入门