Partager via


Implémentation d’IAMErrorLog

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement au nouveau code d’utiliser MediaPlayer, IMFMediaEngine et La capture audio/vidéo dans Media Foundation au lieu de DirectShow, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

[Cette API n’est pas prise en charge et peut être modifiée ou indisponible à l’avenir.]

L’interface IAMErrorLog contient une seule méthode, LogError. Les paramètres de la méthode contiennent des informations sur l’erreur qui s’est produite.

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.

Le code d’erreur et la chaîne d’erreur sont définis par DirectShow Editing Services. Pour obtenir la liste des erreurs, consultez Erreurs de rendu.

Le paramètre pExtraInfo contient un pointeur vers un type VARIANT qui contient des informations supplémentaires sur l’erreur. Le type de données et le contenu du VARIANT dépendent de l’erreur spécifique qui s’est produite. Par exemple, si l’erreur a été provoquée par un nom de fichier incorrect, variant est une chaîne avec le nom de fichier incorrect. Certaines erreurs n’ayant pas d’informations supplémentaires, pExtraInfo peut avoir la valeur NULL. Le code suivant montre comment tester le membre vt du VARIANT, qui indique le type de données, et mettre en forme un message en conséquence.

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

Notes

Ne libérez pas le VARIANT pointé par

Étiquette Valeur
pExtraInfo

. En outre, le VARIANT devient non valide après le retour de la méthode, donc ne la référencez pas ultérieurement.

 

Erreurs de journalisation