Freigeben über


Implementieren von IAMErrorLog

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

[Diese API wird nicht unterstützt und kann in Zukunft geändert oder nicht mehr verfügbar sein.]

Die IAMErrorLog-Schnittstelle enthält eine einzige Methode, LogError. Die Parameter der -Methode enthalten Informationen über den aufgetretenen Fehler.

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.

Der Fehlercode und die Fehlerzeichenfolge werden von DirectShow Editing Services definiert. Eine Liste der Fehler finden Sie unter Renderfehler.

Der pExtraInfo-Parameter enthält einen Zeiger auf einen VARIANT-Typ, der zusätzliche Informationen zum Fehler enthält. Der Datentyp und der Inhalt des VARIANT-Elements hängen vom aufgetretenen spezifischen Fehler ab. Wenn der Fehler beispielsweise durch einen falschen Dateinamen verursacht wurde, ist VARIANT eine Zeichenfolge mit dem ungültigen Dateinamen. Einige Fehler enthalten keine zusätzlichen Informationen, sodass pExtraInfo möglicherweise NULL ist. Der folgende Code zeigt, wie Sie das vt-Member des VARIANT-Elements testen, das den Datentyp angibt, und eine Nachricht entsprechend formatieren.

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);
}

Hinweis

Befreien Sie nicht den VARIANT-Wert, auf den verwiesen wird,

Bezeichnung Wert
pExtraInfo

. Außerdem wird der VARIANT-Wert ungültig, nachdem die -Methode zurückgegeben wurde. Verweisen Sie daher später nicht darauf.

 

Protokollierungsfehler