Delen via


IAMErrorLog implementeren

[De functie die is gekoppeld aan deze pagina, DirectShow, is een verouderde functie. Het is vervangen door MediaPlayer, IMFMediaEngineen Audio/Video Capture in Media Foundation. Deze functies zijn geoptimaliseerd voor Windows 10 en Windows 11. Microsoft raadt ten zeerste aan om nieuwe code te gebruiken MediaPlayer, IMFMediaEngine en Audio/Video Capture in Media Foundation in plaats van DirectShow, indien mogelijk. Microsoft stelt voor dat bestaande code die gebruikmaakt van de verouderde API's, indien mogelijk opnieuw worden geschreven om de nieuwe API's te gebruiken.]

[Deze API wordt niet ondersteund en kan in de toekomst worden gewijzigd of niet beschikbaar.]

De IAMErrorLog-interface bevat één methode, LogError-. De parameters voor de methode bevatten informatie over de fout die is opgetreden.

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.

De foutcode en de fouttekenreeks worden gedefinieerd door DirectShow Editing Services. Zie Rendering Errorsvoor een lijst met fouten.

De parameter pExtraInfo bevat een aanwijzer naar een VARIANT-type dat aanvullende informatie over de fout bevat. Het gegevenstype en de inhoud van de VARIANT zijn afhankelijk van de specifieke fout die is opgetreden. Als de fout bijvoorbeeld is veroorzaakt door een onjuiste bestandsnaam, is de VARIANT een tekenreeks met de ongeldige bestandsnaam. Sommige fouten bevatten geen extra informatie, dus pExtraInfo- kan NULL-zijn. De volgende code laat zien hoe u de vt lid van de VARIANT kunt testen, wat het gegevenstype aangeeft en een bericht dienovereenkomstig opmaken.

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

Notitie

Laat de VARIANT die wordt aangewezen door niet los.

Etiket Waarde
pExtraInfo

. De VARIANT wordt ook ongeldig nadat de methode terugkeert, dus verwijs er later niet naar.

 

logboekregistratiefouten