在 C++ 中,MFC:
我有一个 CComPointer:
CComPointer<IMyTask> m_pTask;
我的代码中有很多地方,我调用这个 ComPointer 来运行任务的方法。例如:
void method1()
{
if (FAILED(hRet = m_pTask->MyFunc1()))
.....
}
void method2()
{
if (FAILED(hRet = m_pTask->MyFunc2()))
.....
}
当 MyTask 关闭时,我尝试解决问题以恢复。我写了一个方法,recover(),将 CoCreate 重新运行到 MyTask,它实际上解决了这个问题。
我可以看到,如果 MyTask 死了,我会得到一个 HR 失败代码 -2147023174,RPC 服务器不可用。但是,com 指针 m_pTask 具有完整的数据(它不知道任务已死)。
我可以做这样的事情:
void method1()
{
if (FAILED(hRet = m_pTask->MyFunc1()))
if (hRet == -2147023174)
recover();
.....
}
void method2()
{
if (FAILED(hRet = m_pTask->MyFunc2()))
if (hRet == -2147023174)
recover();
.....
}
但是,因为我有很多通过编译器调用方法,所以我想做一些更通用的东西。我希望每次尝试通过 ComPointer 运行方法时,在运行该方法之前,检查该任务是否已经存在,如果不存在 - 运行恢复方法。因为即使任务结束了,ComPointer 仍然拥有 CoCreate 时间的所有数据,我不知道我该怎么做。
我该怎么做?
任务因为系统中的某些时候发生错误而死掉了,目前我的解决方案不需要找到任务失败的原因,只需将其恢复即可。我正在寻找一个通用的解决方案——比如 ComPointer 的包装器,但我希望包装器类只检查 MyTask 是否仍然存在,如果它存在,它将返回 ComPointer,如果不存在,它将运行恢复.
我该怎么做?