Какое исключение бросить в Delphi, чтобы его можно было отловить внутри .NET

Рейтинг: 2Ответов: 1Опубликовано: 25.12.2014

Есть неуправляемая библиотека, написанная на Delphi, и графическая оболочка, написанная на C#. Нужно сделать так, чтобы библиотека на Delphi могла бросить исключение, которое можно было бы обработать на уровне C#. Сейчас в библиотеке на Delphi бросается кастомное исключение, но до .NET доходит SEHException, на которое блок try/catch не действует. Что нужно бросить на Delphi, чтобы всё заработало?

Ответы

▲ 3Принят

Исключения в Delphi и исключения в .NET - две большие разницы, они никак не совместимы. Единственный выход, который вижу, это модифицировать вашу Delphi DLL-ку так, чтобы методы возвращали error codes вместо исключений (так же, как это делает WinAPI), а затем написать wrapper на .NET, который будет эти коды ошибок переводить в исключения.

Есть еще вариант для экстремалов - переписать вашу DLL-ку на Delphi в COM библиотеку, и заюзать ее в .NET через COM Interop. Мне кажется, исключения там должны ловиться все, но я сам не пробовал.

Но я бы выбрал первый вариант, дешево и сердито.