Аварийное завершение программы при завершении работы с TRESTClient - PullRequest
0 голосов
/ 26 марта 2020

Когда программа, имеющая компоненты TRESTClient, закрывается, выдается сообщение об ошибке «Аварийное завершение программы».

Недавно мы обновили проект с C ++ Builder 2009 до C +. + Строитель 10,2 Токио. После этого мы добавили новый TRESTClient в наш проект. Теперь каждый раз, когда мы пытаемся закрыть приложение, оно показывает эту ошибку. Это означает, что, вероятно, сделан вызов abort().

Мы запустили отладчик до конца функции tWinMain(), которая показывает, что это происходит после возврата. Это показывает, что исключение выдается во время очистки приложения. Во включенном стеке вызовов он показывает Data::Bind::Objectscope::Finalization и UnregisterScope(), вызываемые оттуда. Это наиболее вероятно, когда генерируется исключение.

Эта проблема очень похожа на проблему в в этом сообщении на форуме . Реми Лебо описывает это как ошибку, при которой, если элемент не найден при отмене регистрации, возникает исключение.

1 Ответ

1 голос
/ 26 марта 2020

Это исправлено с 10.3.2: { ссылка }

Чтобы исправить это в более старой версии:

Проблема связана с порядком ссылок двух библиотек, а именно «bindengine.lib» и «bindcomp.lib».

Когда «bindcomp.lib» связан в ДО, «bindengine.lib» Вы увидите эту проблему, и по какой-то разочаровывающей причине IDE настаивает на том, чтобы расположить их в неправильном порядке. Таким образом, чтобы решить проблему.

  1. закройте ваш проект, который показывает проблему в IDE.
  2. загрузить .cbproj проекта в текстовый редактор (подсказка: не в IDE)
  3. найти тег "".
  4. переключить положение двух библиотек "...; bindengine.lib; bindcomp.lib; ...", чтобы получить "bindengine" ДО "bindcomp".
  5. повторите процесс для любого другого "" (поскольку у вас может быть более одной конфигурации)
  6. повторите 3. до 5. для тега ""
  7. сохраните проект файл.
  8. откройте его в IDE и создайте или очистите и снова создайте проект. Так что EXE-файл будет повторно связан.
...