我们有一个Delphi 5应用程序,即不运行时包,DLL或外部资源(即,单一的可执行文件)构建的。当我们一个客户的电脑上安装它,我们得到了以下错误消息:

  

类的TListView未发现

  

类的TImage未发现

我们已经安装了数十个电脑前无事,但这个最新的安装是有问题的。

在目标PC是没有安装其他软件的Windows XP(服务包3)的新的安装。

它不抱怨的所有类然而只有一个或两个。例如TPanel / TForm的/ TEDIT都是确定。

谁能想到是什么原因造成的?

修改

在新PC上的EXE是30左右,我知道的其他电脑,从Windows XP的Sp1,2,3,Windows Vista和Windows嵌入式。无论新老电脑都安装了旧版本,然后用最新版本更新。唯一不同的是,该版本跳是最新的安装较高。

有帮助吗?

解决方案

Re0sless,

我建议你打开和关闭应用程序的每一个形式,之后做一个新的版本。如果没记错的话,即得该解决方案时,我们遇到了类似的问题。

您也可以看看 DFM检查打开并关闭所有的DFM的自动和 CnPack开发来帮助你清理你的使用条款

的问候,结果 利芬

其他提示

这通常是一个.DFM的流式传输过程中发生错误。用的TLabel组件,因为许多人删除的形式,或者帧中的的TLabel字段以削减杂波和减少的形式的实例大小通常发生该错误。他们让公共和混乱的错误,然而,就是在他们过度的热忱,他们删除全部的TLabel引用。这时候,不好的事情开始发生。让我跑下来的流媒体系统是如何定位一个组件的类。

记住的是,在.DFM类引用的只是一个字符串。流媒体系统有这个字符串转换为类引用(TComponentClass)。有迹象表明,流媒体系统使用要做到这一点两种机制。第一个是非常简单的,涉及类引用的全局列表。你可以调用的RegisterClass或RegisterClasses明确使流媒体系统意识到这一点。二是更加微妙,而不是很出名;事实上,它是德尔福:-)“神奇”的一部分。当编译器生成的形式中,所有表示的形式上的组件中的字段被处理和内部表构建作为RTTI的一部分,或元数据的形式/帧/数据模块本身。下表包含了所有由组件领域所代表的各个组件类型的引用的列表。因此,即使一个组件是的在全局列表中,它仍可以通过扫描这个编译器生成的表中找到。这是Classes.TReader.GetFieldClass()方法做什么。

返回到我的TLabel例如,该问题很容易通过简单地确保给定的组件类型中的至少一个具有一字段固定。因此,只要存在至少的TLabel类型的字段, 所有其他TLabels将加载就好了。所以你的情况,确保了TListView或TImage中的字段都没有被删除。

我认为利芬肯定是正确的轨道上:在运行时间期间不被发现简单基类是一个Delphi(接头)的问题。此异常的引起的操作系统。

我有类似问题的经验:链接器产生与错误地安排在单位一个项目结果。 例如:一个表格单元的基本单位之前被链接英寸迫使项目完全重新编译/重新链接本身应该让这个例外消失。

一个简单[全部重建]将可能是不够的。您可以尝试不优化,重新编译。

我试图重现这个错误,但我一直没能来。 Delphi的编译器/链接器是最好的一个 - 速度编译的EXE的汇编/速度的 - 但此错误肯定是一个显示塞

  

请注意:我只经历   这个错误在D5。谁还有   经历过这种错误与其他   Delphi的版本?

我已经看到了类似的问题,因为文件复制错误。为了使问题更混乱,故障是一个中间介质设备上。这件事是通过简单地从现有的发行版本重新复制文件来解决。

这可能是不可能的,现在确认,但它很可能是问题“解决”;不是因为去除一个unnecessay的使用条款项目,但因为它也参与该可执行文件的新副本。

我有同样的问题。类TCheckBox没有找到。我通常是通过形式的.DFM编辑大量的部件组(例如重命名大量成分)。当我通过它重命名我的表上的所有复选框.DFM这个错误出现。

我只是削减所有的复选框,并再次将其粘贴(所以.DFM文件被刷新)。误差消失。

对于这种类型的所有错误将溶液“未找到类XXX”是简单的。在文本编辑器中的窗体打开DFM文件和manualy除去其中的XXX对象的定义。

更改形式的名和保存与其它名称的.pas。更改所有的引用,如果这是在其他单位用于创建新的单位名称。全部生成。 有了这个错误消失。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top