Delphi DLL Exception закрывает мое приложение - PullRequest
0 голосов
/ 15 апреля 2011

У меня есть Delphi 2010 DLL, загруженная в приложение Delphi 2010.Он прекрасно работает большую часть времени.Но есть некоторые исключения, которые выходят из DLL (даже те, которые обрабатываются блоком try..except), и мое приложение вылетает без сообщения об ошибке, без информации вообще.Исключения, о которых я говорю, похожи на AV, а не на исключения, поднятые разработчиком.Я попытался загрузить DLL с SafeLoadLibrary без удачи.У меня также есть приложение и исходный код DLL.Я не публикую библиотеку DLL или исходный код приложения, потому что я не могу, они защищены авторским правом (я действительно хотел бы, чтобы я мог).

Могу ли я что-нибудь сделать, чтобы исключить внутреннее исключение DLL, приводящее к аварийному завершению моего приложения?

РЕДАКТИРОВАТЬ

У меня нет способа не позволить DLL вызвать исключение.Может случиться, что не все коды идеальны.Может быть неизбежным, что DLL вызывает исключение, но это не должно привести к сбою основного приложения.Представьте, например, что вы используете стороннюю dll, у которой нет исходного кода.Это не очень хорошая вещь, что когда эта dll падает по какой-то причине, ваше основное приложение будет убито.Должен быть способ не допустить этого.

1 Ответ

1 голос
/ 16 апреля 2011

То, что вы просите, невозможно. DLL используют то же пространство памяти, что и исполняемый процесс. Таким образом, любой из них может вызвать сбой приложения.

Вы правильно поняли, что ваша DLL должна делать то, что может. Он должен быть хорошим гражданином в пространстве процесса подачи заявления.

Некоторые вещи, которые ты можешь сделать, чтобы быть милыми.

  • Оберните каждую экспортируемую функцию блоком try / исключением и корректно обработайте исключения.
  • Во время тестирования используйте SafeMM для проверки проблем с памятью, которые вы, возможно, не обнаружили иначе.
  • Убедитесь, что вы не передали управляемые типы Delphi
...