Usando os exemplos de código do SDK de Formato de Mídia do Windows

[O recurso associado a esta página, Windows Media Format 11 SDK, é um recurso herdado. Ele foi substituído por Leitor de Origem e Gravador de Coletor. O Leitor de Origem e o Gravador do Coletor foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use o Leitor de Origem e o Gravador do Coletor em vez do SDK do Windows Media Format 11, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Muitas das seções explicativas desse SDK incluem exemplos de código. Os exemplos são escritos para serem o mais claros e concisos possível. Ao ler os exemplos, você deve estar ciente das convenções a seguir.

  • Todos os exemplos são considerados como incluindo windows.h e wmsdk.h. Todos os outros arquivos de cabeçalho necessários são mencionados no texto explicativo.

  • A verificação de erros foi restrita à interrupção da função se ocorrer um erro. Em um aplicativo, você deve marcar para códigos de erro específicos e fornecer algum tipo de relatório de erros.

    Ao verificar valores retornados de métodos ou funções que retornam um valor HRESULT , você deve usar a macro FAILED para descobrir se o valor retornado indica falha.

    HRESULT hr;
    hr = SomeFunction();
    if (FAILED(hr))
    {
       // Check for specific error values.
    }
    

    Muitos dos exemplos nesta documentação usam uma macro chamada GOTO_EXIT_IF_FAILED, que é definida no código a seguir.

    #ifndef GOTO_EXIT_IF_FAILED
    #define GOTO_EXIT_IF_FAILED(hr) if(FAILED(hr)) goto Exit;
    #endif
    

    Cada uma dessas funções de exemplo tem uma marca chamada "Exit:", após a qual todas as interfaces e memória alocadas na função são liberadas e o código de erro, se houver, é retornado.

  • Interfaces e memória são liberadas nos exemplos de código usando macros chamadas SAFE_RELEASE e SAFE_ARRAY_DELETE. Essas macros são definidas no seguinte código:

    #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
    
  • Muitas vezes, você precisará incluir a lógica de um exemplo em outro exemplo para que o exemplo seja significativo. Nessas instâncias, um comentário TODO é incluído, com uma referência ao exemplo de código apropriado.

  • Para facilitar a leitura do código, nenhuma das funções de exemplo nesta documentação valida seus parâmetros de entrada. Se você copiar qualquer uma dessas funções em seu código, deverá validar todos os parâmetros de entrada.

Introdução