A Windows Media Format SDK kód példáinak használata

[A laphoz társított funkció, Windows Media Format 11 SDKegy régi funkció. A helyét átvette a Forrásolvasó és a Kimeneti író. Forrásolvasó és Kimenet Író Windows 10-re és Windows 11-re lett optimalizálva. A Microsoft határozottan javasolja, hogy az új kód Forrásolvasót és Kimeneti írót használjon Windows Media Format 11 SDKhelyett, ha lehetséges. A Microsoft javasolja, hogy az örökölt API-kat használó meglévő kódot át kell írni az új API-k használatára, ha lehetséges.]

Az SDK számos magyarázó szakasza tartalmaz példakódokat. A példákat a lehető legtisztultabbnak és tömörnek kell lenniük. A példák elolvasásakor tisztában kell lennie a következő konvenciókkal.

  • Az összes példa a windows.h és a wmsdk.h használatát feltételezi. A magyarázó szöveg minden más szükséges fejlécfájlt megemlít.

  • Hibaellenőrzéskor a függvényből való kilépésre korlátozódik, ha hiba történik. Egy alkalmazásban bizonyos hibakódokat kell keresnie, és meg kell adnia valamilyen hibajelentést.

    Ha olyan metódusok vagy függvények visszatérési értékét ellenőrzi, amelyek HRESULT értéket adnak vissza, használja a FAILED makrót annak megállapítására, hogy a visszatérési érték hibát jelez-e.

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

    A dokumentáció számos példája egy GOTO_EXIT_IF_FAILED nevű makrót használ, amely az alábbi kódban van definiálva.

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

    Ezek a példafüggvények mindegyike rendelkezik egy "Exit:" nevű címkével, amely után a függvényben lefoglalt összes interfész és memória felszabadul, és a hibakódot adja vissza, ha van ilyen.

  • A kódpéldákban SAFE_RELEASE és SAFE_ARRAY_DELETE nevű makrók segítségével jelennek meg a felületek és a memória. Ezek a makrók a következő kódban vannak definiálva:

    #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
    
  • Gyakran előfordul, hogy az egyik példa logikáját egy másik példában kell szerepeltetnie ahhoz, hogy a példa értelmezhető legyen. Ezekben a példányokban egy TODO-megjegyzés szerepel, amely a megfelelő kód példájára hivatkozik.

  • A kód könnyebb olvashatósága érdekében a jelen dokumentáció egyik példafüggvénye sem érvényesíti a bemeneti paramétereket. Ha a függvények bármelyikét a kódba másolja, ellenőrizze a bemeneti paramétereket.

első lépések