我在我的 Delphi 2007 项目中遇到了一系列级联的“EClassNotFound”错误。似乎不是由缺少 Name 属性值引起的,因为通常情况下,虽然在初始化部分添加 RegisterClass(XXX) 修复了手头的 EClassNotFound 错误,但另一个似乎无限期地跟随它。
我终于在文本编辑器中打开了 DFM 文件,它看起来可能已经损坏(表单元素名称中有很多非 ASCII 字符,与我在 DFM 文件中看到的相比,看起来非常“非结构化” )。(我会在这里发布相同的内容,但不确定是否可以,使用非 aSCII,所以会推迟)。
表单加载正常,似乎编译/语法检查也可以,但是一旦我运行它,麻烦。
回到 SVN 中的早期版本,它看起来已经处于这种状态有一段时间了,这让我认为要么 A)DFM 文件不是我的问题,要么 B)Delphi 表单流式处理是相当错误的-宽容/健壮(奖励问题:它是什么?)。
如果 DFM 文件是问题所在,并且已损坏,则回滚将必须是回滚方式,这将是昂贵的。鉴于 IDE 仍然可以加载它,是否有任何实用程序可以清理文件?
或者,我是否完全脱离了 DFM 作为主要嫌疑人的基础?
感谢大家的投入。忘记了带有 DFM 文件的二进制/文本选项,所以这很有帮助。看起来 DFM 本身没有损坏。
不过仍然有 EClassError 问题。回复:它缺少属性值,或引用不存在的属性等,还有一个问题:错误的类是给出的(当前是 TnxSqlUpdateObject,但如果到目前为止的经验是一致的,可能更多的等待时间)通常/总是真正的“罪魁祸首”类/对象?
例如,现在我的主窗体有四个对 TnxSqlUpdateObject 的引用,而这些引用实际上是放在窗体上的。如果我将 RegisterClass(TnxSqlUpdateObject) 放在初始化部分,它对于 EClassNotFound 错误运行良好,但随后会继续到下一个错误(在本例中为 TStringField)。
在这种情况下,我已经重新安装了 NexusDB 组件,并且还使用我认为可能是问题的一些组件构建了一个新项目。它编译并运行良好,直到我从我的真实项目中添加了另一种形式(不幸的是,它又引用了很多其他形式)。
所以,听起来我真正的问题是如何有条不紊地诊断和修复任何和所有 EClassNotFound 错误?