Udostępnij przez


Korzystanie z przykładów kodu zestawu SDK formatu Windows Media

[Funkcja skojarzona z tą stroną, windows Media Format 11 SDK, jest starszą funkcją. Został zastąpiony przez Source Reader i Sink Writer. Czytnik źródła i Writer ujścia zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Microsoft zdecydowanie zaleca, aby nowy kod używał czytnika źródeł i zapisywacza ujścia zamiast zestawu SDK Windows Media Format 11, jeśli to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]

Wiele sekcji objaśniających tego zestawu SDK zawiera przykłady kodu. Przykłady są napisane tak jasno i zwięzłe, jak to możliwe. Podczas odczytywania przykładów należy pamiętać o następujących konwencjach.

  • Przyjmuje się, że wszystkie przykłady obejmują windows.h i wmsdk.h. Wszelkie inne wymagane pliki nagłówków są wymienione w tekście objaśniającym.

  • Sprawdzanie błędów zostało ograniczone do przerywania działania funkcji, jeśli wystąpi błąd. W aplikacji należy sprawdzić określone kody błędów i podać jakiś rodzaj raportowania błędów.

    Podczas sprawdzania wartości zwracanych z metod lub funkcji, które zwracają wartość HRESULT, należy użyć makra FAILED, aby sprawdzić, czy wartość zwracana wskazuje błąd.

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

    Wiele przykładów w tej dokumentacji używa makra o nazwie GOTO_EXIT_IF_FAILED, które jest zdefiniowane w poniższym kodzie.

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

    Te przykładowe funkcje mają tag o nazwie "Exit:", po którym wszystkie interfejsy i pamięć przydzielona w funkcji są zwalniane, a kod błędu, jeśli istnieje, jest zwracany.

  • Interfejsy i pamięć są wydawane w przykładach kodu przy użyciu makr o nazwie SAFE_RELEASE i SAFE_ARRAY_DELETE. Te makra są definiowane w następującym kodzie:

    #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
    
  • Często należy uwzględnić logikę jednego przykładu w innym przykładzie, aby przykład był zrozumiały. W tych przypadkach dołączany jest komentarz TODO z odwołaniem do odpowiedniego przykładu kodu.

  • Aby ułatwić odczytywanie kodu, żadna z przykładowych funkcji w tej dokumentacji nie weryfikuje ich parametrów wejściowych. Jeśli skopiujesz dowolną z tych funkcji do kodu, należy zweryfikować wszystkie parametry wejściowe.

Rozpoczynanie