【问题标题】:Why does MSHTML_TLB.pas produce warnings?为什么 MSHTML_TLB.pas 会产生警告?
【发布时间】:2011-01-16 07:02:38
【问题描述】:

在将项目从 BDS 2006 转换为 Delphi 2009 后,我正试图消除项目中的许多警告。

项目需要一个名为 MSHTML_TLB 的类型库。源文件 mshtml_tlb.pas 是一个非常大的文件(大约 16MB 和 >440.000 行代码),它是在将类型库导入 Delphi 2009 时生成的。

此文件在构建项目时会产生许多警告:
W1010 Method 'ToString' hides virtual method of base type 'TObject'

由于 Delphi 本身已经创建了该文件,我想知道为什么会出现这些警告,我是否应该忽略它们? 如果是这样,有没有办法只为这个文件禁用这种警告?

【问题讨论】:

    标签: delphi delphi-2009 typelib


    【解决方案1】:

    启动德尔福。

    在主工具栏的“组件”菜单上选择“导入 ActiveX 控件...” 在列表框中滚动并选择“Microsoft HTML Object Library”。

    类名”应该列出“TScriptlet”。

    单击“安装...”,然后在出现的“安装”表单和“Yes”上单击“确定” " 在确认提示中。

    【讨论】:

      【解决方案2】:

      作为最后的手段,您可以隐藏警告。在 Delphi 2010 中,这是在 Project Options/Delphi Compiler/Hints and Warnings 中。我认为这个特殊的警告是“重新声明符号会隐藏基类中的成员”。

      【讨论】:

        【解决方案3】:

        将此行写入 MSHTML_TLB.pas 文件的开头(粗体):

        单元 MSHTML_TLB;
        {$WARNINGS 关闭}

        最后:

        {$WARNINGS ON}
        结束。

        【讨论】:

        • 编译器指令无论如何都会在每个单元开始时重置。无需在设备结束时重新打开它们。
        • 不幸的是,在 Delphi 2007 中,这很重要(我可以发送一个示例)。 Delphi 2010 现在就像你写的那样。
        【解决方案4】:

        Delphi 在 TObject 中引入了这个虚方法。您在派生类中对 ToString 的声明不使用覆盖,因此无法再访问 TObject 的 ToString 方法。除非您以不同的方式声明您的方法,否则向您的 ToString 方法添加覆盖应该可以解决问题。

        【讨论】:

        • 我的项目代码中的任何地方都没有 ToString 的声明。 MSHTML_TLB 仅用于保存 TWebBrowser 组件的位图。即使我删除了所有与 MSHTML_TLB 相关的代码,只留下 uses 子句,我也会得到相同的警告。
        • Holger,如果您导入了类型库,并且该代码声明了 ToString,那么您的代码中有 一个 ToString 声明。 (不是你自己写的,不代表有问题时你就束手无策。试着让你的老板知道。)这个单元包含在你的项目中,所以不管有没有其他单元,它都会被编译用它。警告出现在编译时,而不是在使用时。 “覆盖”或“重新引入”导入单元中的 ToString 方法以修复警告。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多