В C++, MFC:Проверить наличие COM указатель
У меня есть 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, перед запуском метода, чтобы проверить, что задача уже существует, а если нет - запустите метод восстановления. Поскольку даже когда задача мертва, ComPointer все еще имеет все данные из времени CoCreate, я не знаю, как это сделать.
Как я могу это сделать?
Задача мертва из-за ошибки, которая возникает в системе, и теперь для моего решения не требуется найти причину сбоя задачи, просто чтобы восстановить ее. Я ищу общее решение - как оболочку для ComPointer, но я хочу, чтобы класс-оболочка проверял только, существует ли MyTask, и если он есть, он вернет ComPointer, а если нет, он запустит восстановление ,
Как я могу это сделать?
Это не MFC это ATL. –
Плохая идея, ИМХО. Поездки в сети не дешевы; вы фактически удваиваете их количество. Время выполнения DCOM проверяет мертвые серверы в любом случае - периодический пинг. –
@Seva Alekseyev: Нет, он не удваивает их сумму, ему не понадобится восстановление, если сервер в порядке, что обычно бывает. И если сервер не в порядке, перезапуск его требует много времени. – sharptooth