Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обработка ошибки при QueryInterface / 4 сообщений из 4, страница 1 из 1
05.07.2021, 19:45
    #40081939
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибки при QueryInterface
При вызове QueryInterface у меня может произойти исключение. Хочу это исключение отдать клиенту.

На сервере пишу
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
function TMyComObject.ObjQueryInterface(const AIID: TGUID; out AObj): HRESULT;
begin
  try
    Result := inherited ObjQueryInterface(AIID, AObj);
  except
    Result := SafeCallException(ExceptObject, ExceptAddr);
  end;
end;

При возникновении исключения Result = E_UNEXPECTED и текст исключения кладется в IErrorInfo. Все отлично. Теперь пишу на клиенте
Код: pascal
1.
2.
3.
4.
5.
LRes := LIntf.QueryInterface(IID_IReader, FReader);
if LRes < 0 then begin
  FReader := nil;
  SafeCallErrorProc(LRes, ReturnAddress);
end;

Здесь LRes = E_NOINTERFACE и IErrorInfo.GetDescription возвращает "Интерфейс не поддерживается". Что не так? Почему пропадает информация об ошибке?


С уважением, Vasilisk
...
Рейтинг: 0 / 0
05.07.2021, 22:10
    #40081972
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибки при QueryInterface
As implemented in TObject, SafeCallException simply returns E_UNEXPECTED. This is
the appropriate response for classes that do no support interfaces.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.07.2021, 12:36
    #40082061
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибки при QueryInterface
Dimitry Sibiryakov,

TComObject перекрывает этот метод и заполняет IErrorInfo. К этому вопросов нет. Вопрос - почему заполненный IErrorInfo не доходит до клиента и почему теряется код ошибки?.

Такое ощущение, что подсистема COM ошибки от QueryInterface обрабатывает особым образом
...
Рейтинг: 0 / 0
06.07.2021, 13:14
    #40082081
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибки при QueryInterface
Проблема в том, что COM объект регистрируется в потоковой модели Free, а вызывается из Apartment. Если зарегистрировать как Both, то код ошибки и текст до клиента доходят
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обработка ошибки при QueryInterface / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]