Condividi tramite


Uso degli esempi di codice di Windows Media Format SDK

[La funzionalità associata a questa pagina, Windows Media Format 11 SDK, è una funzionalità legacy. È stata sostituita da Lettore di origine e Writer sink. Lettore di origine e Writer sink sono stati ottimizzati per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi Lettore di origine e Writer sink anziché Windows Media Format 11 SDK, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Molte delle sezioni esplicative di questo SDK includono esempi di codice. Gli esempi vengono scritti per essere più chiari e concisi possibile. Quando si legge gli esempi, è necessario tenere presente le convenzioni seguenti.

  • Si presuppone che tutti gli esempi includano windows.h e wmsdk.h. Tutti gli altri file di intestazione obbligatori sono menzionati nel testo esplicativo.

  • Il controllo degli errori è stato limitato all'interruzione della funzione se si verifica un errore. In un'applicazione è necessario verificare la presenza di codici di errore specifici e fornire un tipo di segnalazione di errori.

    Quando si controllano i valori restituiti da metodi o funzioni che restituiscono un valore HRESULT , è necessario usare la macro FAILED per individuare se il valore restituito indica un errore.

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

    Molti degli esempi di questa documentazione usano una macro denominata GOTO_EXIT_IF_FAILED, definita nel codice seguente.

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

    Queste funzioni di esempio hanno un tag denominato "Exit:", dopo il quale vengono rilasciate tutte le interfacce e la memoria allocata nella funzione e il codice di errore, se presente, viene restituito.

  • Le interfacce e la memoria vengono rilasciate negli esempi di codice usando macro denominate SAFE_RELEASE e SAFE_ARRAY_DELETE. Queste macro sono definite nel codice seguente:

    #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
    
  • Spesso è necessario includere la logica di un esempio in un altro esempio per l'esempio in modo significativo. In tali istanze viene incluso un commento TODO, con un riferimento all'esempio di codice appropriato.

  • Per semplificare la lettura del codice, nessuna delle funzioni di esempio in questa documentazione convalida i parametri di input. Se si copia una di queste funzioni nel codice, è necessario convalidare tutti i parametri di input.

Introduzione