Delphi - приложение с элементом управления ActiveX вызывает сбой приложения

Я должен использовать объект ActiveX (QlikOCX.ocx). Итак, я создал очень маленькое приложение-образец, которое отлично работает, но когда я закрываю приложение, я получаю такую ​​ошибку:

«application.exe больше не работает -> Найдите решение в Интернете и закройте программу -> Закройте программу

Сведения о проблеме: имя-события-проблемы: APPCRASH ..."

Я хочу знать, можно ли как-то поймать эту ошибку? Благодарю вас!


person flinkiy1    schedule 13.10.2010    source источник
comment
Информацию об этом элементе управления ActiveX можно найти по адресу qlikview.com...   -  person Wim ten Brink    schedule 13.10.2010
comment
Спасибо за этот полезный совет. Я много раз проверял этот веб-сайт и не нашел интересной информации об элементе управления ActiveX.   -  person flinkiy1    schedule 13.10.2010
comment
Что ж, другие могут не знать элемент управления aciveX, поэтому для них он тоже полезен. :-)   -  person Wim ten Brink    schedule 13.10.2010
comment
А, ладно... Извините, ошибся ;)   -  person flinkiy1    schedule 13.10.2010


Ответы (2)


Ошибка, которую вы получаете, может иметь много причин. Это может быть проблема в вашем собственном коде или в элементе управления ActiveX. Например, ваш процесс может завершиться, но один из потоков все еще работает, опрашивая информацию или что-то еще.
Возможно, вы неправильно освобождаете элемент управления ActiveX, что приводит к тому, что остается незаконченная работа. Запуск вашего приложения в отладчике может указать вам местоположение ошибки, но есть вероятность, что это немного сложнее. Иногда дерьмо просто случается...
Вы создали небольшое консольное приложение для тестирования OCX? Или вы импортировали его как компонент и добавили в форму?
В случае консольного приложения убедитесь, что вы не используете глобальную переменную для хранения объекта OCX! Глобальные интерфейсные объекты не всегда освобождаются правильно.
При использовании компонента в форме добавьте в эту форму событие OnClose и добавьте в это событие код, который должен очищать элемент управления OCX. Не освобождайте его, но посмотрите, есть ли у него функция «Закрыть», «Очистить» или «Завершить» или другой метод очистки, который необходимо вызвать. И опять же, не используйте глобальные переменные для интерфейсных типов, таких как элементы управления OCX.

person Wim ten Brink    schedule 13.10.2010
comment
Привет, спасибо за советы. Я использовал ocx как компонент и поместил его в форму. Я пробовал ваши советы, но безуспешно. Я почти уверен, что это ошибка в самом элементе управления ActiceX. Когда я создаю объект элемента управления во время выполнения, а затем вызываю метод free, я получаю ту же ошибку, что и при закрытии приложения... - person flinkiy1; 14.10.2010

Попробуйте вызвать ActiveX.CoFreeUnusedLibraries перед выходом из приложения. Если вы используете Delphi более ранней версии, чем 7.1, см. Quality Central Report#:3272. , была ошибка.

person Schnider    schedule 13.10.2010