Udostępnij przez


Implementacja IAMErrorLog

[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Został zastąpiony przez MediaPlayer, IMFMediaEnginei Audio/Video Capture w Media Foundation. Te funkcje zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał MediaPlayer, IMFMediaEngine i Audio/Video Capture w programie Media Foundation zamiast DirectShow, 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.]

[Ten interfejs API nie jest obsługiwany i może zostać zmieniony lub niedostępny w przyszłości.]

InterfejsIAMErrorLogzawiera jedną metodę LogError. Parametry metody zawierają informacje o błędzie, który wystąpił.

STDMETHODIMP LogError(
    LONG Severity,          // Reserved. Do not use.
    BSTR ErrorString,       // Description.
    LONG ErrorCode,         // Error code.
    HRESULT hresult,        // HRESULT that caused the error.
    VARIANT *pExtraInfo);   // Extra information about the error.

Kod błędu i ciąg błędu są definiowane przez usługi edycji DirectShow. Aby uzyskać listę błędów, zobacz Rendering Errors.

Parametr pExtraInfo zawiera wskaźnik typu VARIANT, który zawiera dodatkowe informacje o błędzie. Typ danych i zawartość WARIANTu zależą od określonego błędu, który wystąpił. Jeśli na przykład błąd został spowodowany nieprawidłową nazwą pliku, VARIANT jest ciągiem o złej nazwie pliku. Niektóre błędy nie zawierają dodatkowych informacji, więc pExtraInfo może być NULL. Poniższy kod pokazuje, jak przetestować vt elementu członkowskiego VARIANT, który wskazuje typ danych i odpowiednio sformatować komunikat.

if( pExtraInfo )    // Report extra information, if any. 
{                           
    printf("\tExtra info: ");
    if( pExtraInfo->vt == VT_BSTR )      // Extra info is a BSTR.
    {
        UINT len = SysStringLen(pExtraInfo->bstrVal);
        char *szExtra = new char[len];
        if (szExtra != NULL)
        {
            // Note - If the BSTR contains embedded NULL characters, this
            // will only pick up the first sub-string.
            WideCharToMultiByte(CP_ACP, 0, pExtraInfo->bstrVal, -1, 
                szExtra, len, 0, 0);
            printf("%s\n", szExtra);
            delete [] szExtra;
        }
    } 
    else if( pExtraInfo->vt == VT_I4 )   // Extra info is an integer.
        printf("%d\n", pExtraInfo->lVal);

    else if( pExtraInfo->vt == VT_R8 )   // Extra info is floating-point.
        printf("%f\n", pExtraInfo->dblVal);
}

Notatka

Nie zwalniaj wariantu wskazanego przez

Etykieta Wartość
pExtraInfo

. Ponadto wariant staje się nieprawidłowy po zakończeniu działania metody, więc nie odwołuj się do niego później.

 

błędy logowania