interface IBackgroundCopyError : public IUnknown
{
public:
virtual HRESULT STDMETHODCALLTYPE GetError(
/* [out] */ BG_ERROR_CONTEXT* pContext,
/* [out] */ HRESULT* pCode) = 0;
virtual HRESULT STDMETHODCALLTYPE GetFile(
/* [out] */ LPWSTR* pVal) = 0;
virtual HRESULT STDMETHODCALLTYPE GetErrorDescription(
/* [in] */ DWORD LanguageId,
/* [out] */ LPWSTR* pVal) = 0;
virtual HRESULT STDMETHODCALLTYPE GetErrorContextDescription(
/* [in] */ DWORD LanguageId,
/* [out] */ LPWSTR* pVal) = 0;
virtual HRESULT STDMETHODCALLTYPE GetProtocol(
/* [out] */ LPWSTR* pVal) = 0;
};
这个接口继承自 IUnknown 接口,它定义了五个纯虚函数:
1. GetError: 获取错误的上下文和错误代码。pContext 参数指示错误的上下文(例如,作业、文件或组件等),而 pCode 参数返回错误代码。
2. GetFile: 获取与错误相关联的文件的路径。
3. GetErrorDescription: 获取错误的本地化描述。LanguageId 参数指定所需的本地化语言。
4. GetErrorContextDescription: 获取错误上下文的本地化描述。LanguageId 参数指定所需的本地化语言。
5. GetProtocol: 获取与错误相关的传输协议的名称。
要使用这个接口,你可以在 IBackgroundCopyCallback 接口的 JobError 方法中获取 IBackgroundCopyError 实例,并通过调用相关的方法来检索错误信息。例如:
HRESULT STDMETHODCALLTYPE JobError(
IBackgroundCopyJob* pJob,
IBackgroundCopyError* pError)
{
BG_ERROR_CONTEXT errorContext;
HRESULT errorCode;
// 获取错误的上下文和错误代码
pError->GetError(&errorContext, &errorCode);
// 处理错误信息
switch (errorContext)
{
case BG_ERROR_CONTEXT_NONE:
// 没有特定的上下文,可能是与整个作业相关的错误
break;
case BG_ERROR_CONTEXT_JOB:
// 与整个作业相关的错误
break;
case BG_ERROR_CONTEXT_FILE:
{
LPWSTR pFilePath;
// 获取与错误相关联的文件路径
pError->GetFile(&pFilePath);
// 处理文件相关的错误
// ...
// 释放资源
CoTaskMemFree(pFilePath);
}
break;
// 其他上下文的处理
// ...
}
// 处理错误代码
// ...
return S_OK;
}
这样,你就可以在 JobError 方法中使用 IBackgroundCopyError 接口来获取并处理 BITS 作业中的错误信息。
转载请注明出处:http://www.zyzy.cn/article/detail/24040/Win32 API/Bits.h/IBackgroundCopyError