다음을 통해 공유


IAMErrorLog 구현

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngineMedia Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

[이 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 Editing Services에 의해 정의됩니다. 오류 목록은 렌더링 오류를 참조하세요.

pExtraInfo 매개 변수에는 오류에 대한 추가 정보를 포함하는 VARIANT 형식에 대한 포인터가 포함되어 있습니다. VARIANT의 데이터 형식 및 내용은 발생한 특정 오류에 따라 달라집니다. 예를 들어 잘못된 파일 이름으로 인해 오류가 발생한 경우 VARIANT는 잘못된 파일 이름을 가진 문자열입니다. 일부 오류에는 추가 정보가 없으므로 pExtraInfoNULL일 수 있습니다. 다음 코드에서는 데이터 형식을 나타내는 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를 해제하지 마세요.

레이블
pExtraInfo

. 또한 VARIANT는 메서드가 반환된 후 유효하지 않으므로 나중에 참조하지 마세요.

 

로깅 오류