什么是1055德尔福错误,这是重要的吗?

时间:2009-11-12 00:48:12

标签: delphi multithreading

我正在使用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'部分。它一直在那里。我不是组件开发人员,我真的根本不明白这个消息的含义,它是否真的是一个问题,以及我应该或不应该做些什么。

这是否重要,如果是,我应该怎么做才能解决它?或者我应该忽略它?

2 个答案:

答案 0 :(得分:11)

Barry的回答涉及这一特定问题的关键,但请注意W1055不是“错误”,它是一个警告(如W所示)。

以下前缀用于编译器输出:

  • Hnnnn - 提示
  • Wnnnn - 警告
  • Ennnn - 错误
  • Lnnnn - 链接器错误
  • Unnnn - 意外(?)内部错误

我按照相对严重性和重要性的顺序列出了这些。提示和警告通常不会影响您的编译 - 它们会告诉您代码中的内容所带来的后果。

错误显然是阻止编译的错误。链接器错误相对不常见,但表明尽管编译成功,但在链接过程中出现了问题。

U错误是坏男孩 - 你很少得到这些错误,他们表明编译器本身出现了严重错误或意外错误。

正如Barry所说 - 在你的情况下,你可以忽略1055,因为这是一个警告,只是告诉你使用“已发布”的方式在你的代码中找到的方式。通常,最好有一个“零警告”(或提示)的策略,因为那时您可以在编译中使用提示或警告作为“红旗”,表示代码中可能存在错误(编译器以你可能不想要的方式解释某些东西。例如,在这种情况下,你没有意思发布方法并将RTTI引入你的类中。)

答案 1 :(得分:6)

它向可执行文件添加了一些数据并稍微增加了它的大小。在极少数情况下,它可能是一种逆向工程风险,因为它允许第三方(例如,破解者)看到该类支持已发布部分中提到的方法。

您可以放心地忽略它,或者将published指令替换为public以使其消失。