Implementieren von IAMErrorLog

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

Die IAMErrorLog-Schnittstelle enthält eine einzelne Methode, LogError. Die Parameter der -Methode enthalten Informationen zum 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 Rendern von Fehlern.

Der pExtraInfo-Parameter enthält einen Zeiger auf einen VARIANT-Typ, der zusätzliche Informationen zum Fehler enthält. Der Datentyp und der Inhalt der VARIANT-Datei hängen vom spezifischen Aufgetretenen Fehler ab. Wenn der Fehler beispielsweise durch einen falschen Dateinamen verursacht wurde, ist variant eine Zeichenfolge mit dem ungültigen Dateinamen. Einige Fehler haben keine zusätzlichen Informationen, sodass pExtraInfo möglicherweise NULL ist. Der folgende Code zeigt, wie sie den vt-Member des VARIANT testen, der 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

Geben Sie die VARIANT-Datei, auf die von verwiesen wird, nicht frei.

| | |

pExtraInfo
|

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

Protokollierungsfehler