我正在使用FindFile例程来搜索目录中的所有文件。原始代码可从Latium Software免费获得。它运行FindFile是一个单独的线程。
它一直运行良好,并且仍然继续正常工作。但是自从我从Delphi 4升级到Delphi 2009后,它现在给出了警告:
W1055: Published caused RTTI ($M+) to be added to type '%s' (Delphi)
错误发生在此线程声明的“已发布”行:
TThread1 = class(TThread)
private
OwnerForm: TFindFileForm;
procedure Initialize;
procedure AddFileName;
procedure Finalize;
protected
procedure Execute; override;
published
constructor Create(Owner: TFindFileForm);
destructor Destroy; override;
end;
德尔福帮助指出:
您向未编译的类添加了“PUBLISHED”部分 {$ M +} / {$ TYPEINFO ON}开关在 效果,或没有来自 用类编译的类 {$ M +} / {$ TYPEINFO ON}切换有效。
TypeInfo标准过程需要类型标识符作为其 参数。在上面的代码中, 'NotType'不代表类型 标识符。
要避免此错误,请确保在{$ M +} / {$ TYPEINFO时进行编译 ON}开启,或从a派生 用它编译的类 {$ M +} / {$ TYPEINFO ON}开启。
好吧,我没有添加'PUBLISHED'部分。它一直在那里。我不是组件开发人员,我真的根本不明白这个消息的含义,它是否真的是一个问题,以及我应该或不应该做些什么。
这是否重要,如果是,我应该怎么做才能解决它?或者我应该忽略它?
答案 0 :(得分:11)
Barry的回答涉及这一特定问题的关键,但请注意W1055不是“错误”,它是一个警告(如W所示)。
以下前缀用于编译器输出:
我按照相对严重性和重要性的顺序列出了这些。提示和警告通常不会影响您的编译 - 它们会告诉您代码中的内容所带来的后果。
错误显然是阻止编译的错误。链接器错误相对不常见,但表明尽管编译成功,但在链接过程中出现了问题。
U错误是坏男孩 - 你很少得到这些错误,他们表明编译器本身出现了严重错误或意外错误。
正如Barry所说 - 在你的情况下,你可以忽略1055,因为这是一个警告,只是告诉你使用“已发布”的方式在你的代码中找到的方式。通常,最好有一个“零警告”(或提示)的策略,因为那时您可以在编译中使用提示或警告作为“红旗”,表示代码中可能存在错误(编译器以你可能不想要的方式解释某些东西。例如,在这种情况下,你没有意思发布方法并将RTTI引入你的类中。)
答案 1 :(得分:6)
它向可执行文件添加了一些数据并稍微增加了它的大小。在极少数情况下,它可能是一种逆向工程风险,因为它允许第三方(例如,破解者)看到该类支持已发布部分中提到的方法。
您可以放心地忽略它,或者将published
指令替换为public
以使其消失。