IAMErrorLog の実装
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/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 は不適切なファイル名を持つ文字列です。 一部のエラーには追加情報がないため、 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 | 値 |
---|---|
|
. また、メソッドが戻った後に VARIANT が無効になるため、後で参照しないでください。
関連トピック