обработка исключений взаимодействия со сборкой .net

#.net #delphi #com

#.net #delphi #com

Вопрос:

Я вызываю .Сетевая сборка из проекта Delphi с использованием COM-взаимодействия.

Могу ли я перехватить.Сетевые исключения в Delphi, создаваемые сборкой?

Ответ №1:

COM не работает с.ЧИСТЫЕ исключения, но со HRESULT значениями. Таким образом, вы никак не можете перехватить.СЕТЕВЫЕ исключения на стороне Delphi. Вы просто получаете HRESULT со значением ошибки. Если вам повезет, вы получите HRESULT с определенным значением ошибки, чтобы вы знали, что пошло не так, если вам не повезет, вы получите некоторое общее значение HRESULT.

Комментарии:

1. хм, если я вызову процедуру, она ничего не вернет, но может выдать исключение, так что я ничего не смогу сделать?

2. Каждый COM-метод возвращает значение HRESULT. Я не знаю , как КОМ взаимодействует в . СЕТЕВАЯ сторона обрабатывается, но я предполагаю, что даже когда процедура пойдет не так, она вернет HRESULT со значением ошибки.

3. @eba: возможно, вы имеете в виду безопасный вызов Delphi. Соглашение о вызове safecall инкапсулирует обработку ошибок COM. При вызове функции safecall из кода Delphi Delphi автоматически проверяет возвращенный HRESULT и при необходимости создает исключение.

4. Более 7 лет спустя… это все еще верно? Эта библиотека: sourceforge.net/p/dotnetruntimelibraryfordelphi/wiki/Home утверждает, что он может «обрабатывать . Сетевые исключения и доступ ко всем . Свойства сетевого исключения, включая имя типа исключения, трассировку стека и т.д.»