使用 TRESTClient 关闭时程序异常终止

Abnormal program termination on shutdown with TRESTClient

当具有 TRESTClient 个组件的程序关闭时,它将显示 "Abnormal Program Termination" 错误。

最近,我们将一个项目从 C++Builder 2009 升级到了 C++Builder 10.2 Tokyo。之后,我们将新的 TRESTClient 添加到我们的项目中。现在,每次我们尝试关闭应用程序时,它都会显示此错误。这意味着可能进行了 abort() 调用。

我们 运行 调试器一直到 tWinMain() 函数结束,这表明它发生在 return 之后。这表明在应用程序清理期间抛出了异常。在包含的调用堆栈中,它显示从那里调用 Data::Bind::Objectscope::FinalizationUnregisterScope()。这很可能是抛出异常的地方。

这个问题似乎与 this forum post 中的问题非常相似。 Remy Lebeau 将此描述为一个错误,如果在注销时找不到某个项目,则会引发异常。

自 10.3.2 起已修复:

要在旧版本中修复它:

问题与两个库的 link 顺序有关,即 "bindengine.lib" 和 "bindcomp.lib"。

当 "bindcomp.lib" 在 "bindengine.lib" 之前被 link 编辑时,您会看到这个问题,出于某些令人沮丧的原因,IDE 坚持将它们放在错误的顺序中.所以要解决问题。

  1. 关闭在 IDE 中显示问题的项目。
  2. 将项目的 .cbproj 加载到文本编辑器中(提示:不是 IDE)
  3. 搜索“”标签。
  4. 交换两个库“...;bindengine.lib;bindcomp.lib;...”的位置,使 "bindengine" 在 "bindcomp" 之前。
  5. 对任何其他“”重复该过程(因为您可能有多个配置)
  6. 为标签“”重复 3. 到 5.
  7. 保存项目文件。
  8. 在 IDE 中打开它并再次构建或清理并制作项目。以便 EXE 得到重新link编辑。