实现 IAMErrorLog

[此 API 不受支持,将来可能会更改或不可用。

IAMErrorLog 接口包含单个方法 LogError。 该方法的参数包含有关所发生错误的信息。

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.

错误代码和错误字符串由DirectShow编辑服务定义。 有关错误列表,请参阅 呈现错误

pExtraInfo 参数包含指向 VARIANT 类型的指针,该类型包含有关错误的其他信息的指针。 VARIANT 的数据类型和内容取决于发生的特定错误。 例如,如果错误是由不正确的文件名引起的,则 VARIANT 是文件名错误的字符串。 某些错误没有额外的信息,因此 pExtraInfo 可能为 NULL。 以下代码演示如何测试 VARIANT 的 vt 成员,该成员指示数据类型,并相应地设置消息格式。

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

注意

不要释放 VARIANT 指向的

Label Value
pExtraInfo

. 此外,VARIANT 在方法返回后变为无效,因此以后不要引用它。

 

日志记录错误