次の方法で共有


IAMErrorLog の実装

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]

[この API はサポートされていないため、今後変更または使用できない可能性があります。]

IAMErrorLog インターフェイスには、LogError という 1 つのメソッドが含まれています。 メソッドのパラメーターには、発生したエラーに関する情報が含まれています。

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 を解放しないでください

Label
pExtraInfo

. また、メソッドが戻った後に VARIANT が無効になるため、後で参照しないでください。

 

エラーのログ記録