2

有时我在XE6 IDE中加载项目时,会出现以下错误

在delphi XE6中打开项目时项目加载错误

此错误导致 TZConnection 组件由于某种莫名其妙的原因从 Datamodule 中删除。请注意,该项目已经加载了很长时间而没有出现问题,而且出乎意料,这种情况发生了。

有没有人见过这种情况并知道阻止它发生的方法?它也发生在其他组件中,并不总是 TZConnection 组件,但主要是 ZConnection。

就像我之前说的,这是随机出现的。我可以关闭项目 A,打开项目 B,然后将其关闭并返回到项目 A 并砰!,发生错误。

有什么线索吗?(请注意,这也曾经发生在 Delphi 2007 中)

4

3 回答 3

2

Zeos 库本身就是造成这个问题的原因。

要了解原因并修复它,请使用 Delphi 启动 Delphi 的第二个实例,并直接调试问题。

我写了一篇博文,显示了这里的确切步骤。

关键是设置为你的 zeos 包运行的可执行文件,确保在调试配置中构建它们,然后单击 Delphi IDE 工具栏上的运行按钮。第二个 delphi 实例将启动。打开受影响的表单,但请确保使用正在调试的 IDE 实例,而不是当前正在调试的 IDE 实例,当发生导致组件自行删除的异常时,您将能够进入打包代码并查看问题。

我怀疑是 DLL 地狱路径问题。(路径中有多个 Zeos 或其他核心 BPL/DLL 副本。)

于 2016-02-09T02:50:43.463 回答
1

与 MartynA 不同,我怀疑这将是由异常引起的。

我更可能认为这些问题是由windows path environment variable太长引起的。

不幸的是,仍然有许多组件供应商甚至一些程序修改“windows 路径环境变量”以使其他程序可以访问他们自己的文件。

windows path environment variable无法提供足够的信息时,窗口将尝试在默认系统目录中查找文件,即C:\Windows\System32

所以我强烈建议检查windows path environment variable它的长度。

最简单的方法是简单地启动command prompt并输入path指令,或者path >> D:\path.log将路径环境变量信息导出到文件中,以便在文件很长的情况下更容易阅读。

编辑:顺便说一句,我刚刚检查了我的路径环境变量,我发现我必须进行一些清理,因为它包含 Delphi XE8 和 Delphi XE 10 Seattle 文件位置的条目,即使我已经从我的计算机中删除了 Delphi XE8。更不用说我很久以前删除的某些程序中的一些条目了。

于 2016-02-08T23:25:11.170 回答
1

实际上,这听起来并不莫名其妙——这可能是由于 DataModule(或通过属性连接到它的具有 db-aware 组件的某种形式)正在加载到 IDE(见下文)时发生的异常引起的。您是否尝试过检查您的 ZEOS .BPL 文件所在的位置是否在您的系统路径上?同样,它们所依赖的任何 .BPL - 请参阅 Zeos 的 .DPK 文件中的“requires”子句。

这种问题经常出现在易碎的 DB 组件中,可能比其他类型的组件更频繁,因为 db 组件更频繁地涉及数据模块和表单之间的链接,例如,当表单上的 db-aware 组件连接到数据模块上的其他组件时。

因此,有时,这种问题是否出现取决于 IDE 重新打开它们的顺序 - 尝试仅在 dm 打开的情况下关闭项目,然后重新打开它。对在 IDE 中打开哪些数据模块和表单以及以何种顺序进行一些试验可以帮助您确定问题。如果/当您有可重复的步骤序列来引发问题时,请将其报告给作者。

确定问题是否由项目加载时的异常引起的一种相当可靠的方法是在另一个实例中运行 IDE 的一个实例。只要 IDE 的第一个(“外部”)实例将调试器设置为“中断语言异常”,它就应该能够在项目运行时直接将您带到异常的来源(当然,假设它发生了)由第二个实例加载。当然,可能需要花一些时间才能“抓住它”,但当你设法做到时,它会非常令人满意。祝你好运!

于 2016-02-08T22:58:32.167 回答