Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi-找不到类TListView_Delphi_Delphi 5 - Fatal编程技术网

Delphi-找不到类TListView

Delphi-找不到类TListView,delphi,delphi-5,Delphi,Delphi 5,我们有一个Delphi5应用程序,它是在没有运行时包、DLL或外部资源(即单个可执行文件)的情况下构建的。在客户端PC上安装时,会收到以下错误消息: 找不到类TListView 或 找不到类TImage 我们以前在几十台PC上安装过它,但这次最新的安装是有问题的 目标电脑是新安装的Windows XP(Service pack 3),未安装其他软件 它并不抱怨所有的课程,只是抱怨一两个。例如,TPanel/TForm/TEdit都可以 谁能想到这是什么原因吗 编辑 据我所知,新电脑上的exe在3

我们有一个Delphi5应用程序,它是在没有运行时包、DLL或外部资源(即单个可执行文件)的情况下构建的。在客户端PC上安装时,会收到以下错误消息:

找不到类TListView

找不到类TImage

我们以前在几十台PC上安装过它,但这次最新的安装是有问题的

目标电脑是新安装的Windows XP(Service pack 3),未安装其他软件

它并不抱怨所有的课程,只是抱怨一两个。例如,TPanel/TForm/TEdit都可以

谁能想到这是什么原因吗

编辑

据我所知,新电脑上的exe在30台左右的其他电脑上,包括WindowsXPSP1、2、3、WindowsVista和WindowsEmbedded。新旧电脑都安装了旧版本,然后更新为最新版本。唯一的区别是最新安装的版本跳转更高。

Re0sless

我建议您打开和关闭应用程序的每个表单,然后重新构建。如果我记性好的话,那就是我们遇到类似问题时的解决办法

您还可以查看自动打开和关闭所有dfm,以及帮助您清理uses子句

问候,

Lieven

我认为Lieven的思路是正确的:运行时找不到简单的基类是Delphi(链接器)的问题。此异常不是由操作系统引起的

我遇到过类似的问题:链接器生成了一个项目,但单元排列错误。
示例:表格单元链接在基本单元之前。强制项目完全重新编译/重新链接本身会使此异常消失

简单的[全部重建]可能不够。您可以尝试在不进行优化的情况下重新编译

我曾试图重现这个错误,但未能重现。Delphi编译器/链接器是最好的编译速度/编译的EXE速度之一,但是这个bug绝对是一个障碍

注:我只经历过 这是D5中的错误。还有其他人吗 与其他用户一起遇到此错误 德尔福版本


这通常是.DFM流传输期间的错误。通常,TLabel组件会出现此错误,因为许多人会从表单或框架中删除TLabel字段,以减少混乱并减小表单的实例大小。然而,他们犯的一个常见且令人困惑的错误是,在他们过度热情的时候,他们删除了所有的标签引用。那是坏事开始发生的时候。让我详细介绍一下流媒体系统如何定位组件的类

请记住,.DFM中的类引用只是一个字符串。流媒体系统必须将此字符串转换为类引用(TComponentClass)。流媒体系统使用两种机制来实现这一点。第一个非常简单,涉及类引用的全局列表。您可以调用RegisterClass或RegisterClass来明确地让流媒体系统知道它。第二个更微妙,不太为人所知;事实上,这一切都是德尔福“魔力”的一部分:-)。当编译器构建表单时,将处理表示表单上组件的所有字段,并构建一个内部表作为RTTI的一部分或表单/框架/数据模块本身的元数据。此表包含对由组件字段表示的所有单个组件类型的引用列表。因此,即使某个组件在全局列表中不是,也可以通过扫描编译器生成的表来找到它。这就是Classes.TReader.GetFieldClass()方法所做的


回到我的TLabel示例,只要确保给定组件类型中至少有一个具有字段,就可以轻松解决此问题。因此,只要至少存在类型为TLabel的字段,all其他TLabel将正常加载。因此,在您的情况下,请确保TListView或TImage字段未被删除。

我看到了由于文件复制错误而导致的类似问题。更令人困惑的是,故障发生在一个中间媒体设备上。通过简单地从现有版本重新复制文件,问题得到了解决


现在可能无法确认,但问题很可能已经"解决";;不是因为删除了不必要的uses子句项,而是因为它还涉及到可执行文件的新副本。

我也遇到了同样的问题。未找到类TCheckBox。我通常通过表单的.DFM编辑大量组件(例如重命名大量组件)。当我通过it.DFM重命名表单上的所有复选框时,会出现此错误


我只是剪切了所有复选框并再次粘贴它们(因此.DFM文件被刷新)。错误消失。

对于“未找到XXX类”类型的所有错误,解决方案很简单。在文本编辑器中打开表单的DFM文件,并手动删除其中XXX对象的定义。

更改表单名称,并用其他名称保存.pas。如果在其他单位中使用,请更改所有参照以创建新的单位名称。全部构建。
这样错误就消失了

我刚刚尝试了“DFM检查”,它可以恢复正常,所以我将尝试打开每个表单来尝试解决它,如果是VCL/DFM问题,是否有原因我没有在其他PC上收到错误?@Re0sless。然后,我的第一个操作是用CnPack清除所有我的uses子句,并验证我没有错误地使用运行时包。我将在*.bpl上使用procmon和filter来检查应用程序是否尝试加载bpl。嗯,列文。。。另外,您是否将新机器上安装的exe与旧机器上安装的exe进行了比较?您是否尝试过从“旧”计算机获取exe并将其复制到新计算机?@Re0sless,