实现 IAMErrorLog
[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayer、 IMFMediaEngine 和 音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 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 是文件名错误的字符串。 某些错误没有额外信息,因此 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 在方法返回后变为无效,因此以后不要引用它。
相关主题