Обработка ошибок OCX в VFP (FoxPro) - PullRequest
0 голосов
/ 21 июля 2011

У меня есть ocx, который иногда может вызвать «внутреннюю ошибку приложения» при вызове одного из его методов в vfp9.

Я пытался использовать по ошибке и попробовать / поймать. В обоих случаях вместо сообщения об ошибке я обнаружил, что Microsoft Visual ForPro столкнулся с проблемой и должен быть закрыт .... Диалоговое окно «Отправить отчет об ошибке / не отправлять».

Вот так выглядит мой код.

для кода ошибки (обратите внимание, что я никогда не вижу окно ожидания):

LOCAL lcOnError
PUBLIC glErrorResult
glErrorResult = .F.
lcOnError = ON('ERROR')
ON ERROR glErrorResult = .T.

This.oOCXControl.Method()

IF glErrorResult
  WAIT WINDOW 'error'
ENDIF
ON ERROR &lcOnError
RELEASE glErrorResult

код try / catch (опять же, я никогда не вижу окно ожидания):

Local oError as Exception
Try
  This.oOCXControl.Method()
Catch to oError When .T.
  WAIT WINDOW 'error'
EndTry

Есть ли что-нибудь еще, что я мог бы попытаться обработать, чтобы предотвратить сбой моего приложения?

Ответы [ 2 ]

0 голосов
/ 21 июля 2011

Рассматривали ли вы запуск метода в другом потоке ? Это может по крайней мере остановить сбой вашего приложения.

0 голосов
/ 21 июля 2011

Итак, у вас неправильный контроль OCX.Я предполагаю, что вы уже рассмотрели варианты, такие как замена его другим поставщиком или проверка обновлений.Что касается возможности справиться с ошибкой, я не знаю ничего, что вы можете сделать, что вы еще не пробовали.Похоже, что элемент управления настолько ненормальный, что разрушает способность VFP продолжать выполнение.

Подумайте, как вы используете элемент управления, и найдите места, где вы можете нарушать правила производителя.Особенно ищите места, где вы можете поощрять контроль утечки памяти.Скорее всего, существует проблема в построении элемента управления, который в конечном итоге лопается при нажатии на эту строку кода.

Например, у меня был опыт работы со старым элементом управления сеткой, который имеет определенные ограничения памяти.Если попытаться добавить слишком много элементов в сетку, это не выдает ошибку, а просто выдает утечку памяти в пространство обработки VFP и в конечном итоге приводит к удалению приложения.Простой ответ состоял в том, чтобы не пытаться добавить тонну предметов в сетку.

...