實作 IAMErrorLog
[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 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 編輯服務所定義。 如需錯誤清單,請參閱 轉譯錯誤。
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
標籤 | 值 |
---|---|
|
. 此外,VARIANT 會在方法傳回之後變成無效,因此請稍後不要參考它。
相關主題