delphi2010 VCLskin5.6 编译时找不到文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi2010 VCLskin5.6 编译时找不到文件相关的知识,希望对你有一定的参考价值。
[DCC Fatal Error] Unit1.pas(7): F1026 File not found: 'WinSkinData.dcu' 不知道是什么问题,有点奇怪,请给位大神指点指点
控件在安装的时候没有指定路径!在 tools options 下面去指定。 参考技术A 把'WinSkinData这个东西重新加载一遍试试 参考技术B 你将WinSkinDat.pas放到任意项目里联编一下,就会生成WinSkinData.dcu
Delphi 编译器不会警告此代码
【中文标题】Delphi 编译器不会警告此代码【英文标题】:Delphi compiler does not warn about this code 【发布时间】:2018-02-04 08:13:22 【问题描述】:调试我的代码时,我注意到 Delphi 编译器 (Berlin 10.1) 不会警告没有返回值的函数。这是正常的吗?
一个简单的例子:
function f(s:string):String;
begin
stringreplace(s,#32,'',[rfReplaceAll]);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
showmessage(F('te st'));
end;
这一行
stringreplace(s,#32,'',[rfReplaceAll]);
应该是
result:= stringreplace(s,#32,'',[rfReplaceAll]);
没有警告!
我认为它应该警告“返回值可能未定义”。但事实并非如此。 我在最后几天更改并重写了部分旧代码。恐怕我的申请中会出现这种错误。
【问题讨论】:
你试过this吗? @user202729 我没有关闭任何警告。我也得到其他情况下的返回值可能是未定义的。 有一些静态代码分析器可以帮助识别此类错误,请参阅Are there any static code analysis tools for Delphi/Pascal? @LURD 试过这个。它有一些很好的特性和一些错误(比如在分析中包含注释的代码部分、未使用循环变量以及检测到语句错误时的短循环)但它也无法识别这些错误。谢谢 @LURD Fixinsight 找到了! 【参考方案1】:这是一个编译器缺陷。托管类型返回值作为 var 参数实现。因此,一旦编译器将函数转换为一个带有额外 var 参数作为返回值的过程,它就会看到一个它认为是由调用者初始化的 var 参数。这就是问题的根本原因。不过,我不会原谅它,这是一个明显的缺陷,而且是一个糟糕的缺陷。我只是就如何发生这种情况提供一些背景知识。
您对此无能为力。也许您能做的最好的事情就是确保您的代码具有强大的单元测试覆盖率。也可以部署像 FixInsight 这样的静态分析工具来帮助根除代码中的此类错误。
【讨论】:
我使用 delphi berlin 10.1。(我编辑了我的帖子以添加这个细节)然后我想我必须再次阅读我更改的代码。当我很困的时候不要编码,从不! ;) 谢谢你的回答。 @David:不,如果结果类型是托管的,即使是 Tokyo 10.2.2 也不会对此发出警告。尝试使用 dynarrays 和字符串:没有警告。整数或双精度:警告。所以什么都没有改变。 FWIW: quality.embarcadero.com/browse/RSP-16880 - 至于行为本身,我认为 Allen Bauer 曾经提到警告是在生成参数列表之后的某个阶段生成的,因此不知道这个 var 参数实际上是函数结果使修复变得相当复杂。 @Stefan:我假设未分配的结果检查是在稍后阶段完成的,而不仅仅是警告的生成。但 ISTM 认为,如果他们真的关心,他们可以携带一个标志,表明某个参数应该是结果,并检查它。以上是关于delphi2010 VCLskin5.6 编译时找不到文件的主要内容,如果未能解决你的问题,请参考以下文章