delphi - 在 Delphi 2007 中设置事件处理程序并收到 "Parameter Lists Differ"错误

标签 delphi event-handling delphi-2007

我正在尝试在 Delphi 2007 中编写一个使用 ActiveX 库的类。该类将捕获 ActiveX 库必须公开其自己的事件的事件,该事件将一些信息添加到 ActiveX 库的事件中。

最重要的是,当我将自己的过程分配给我想要使用的 ActiveX 库的事件时,我收到错误:

E2009 Incompatible types: 'Parameter lists differ'

我确信参数列表是相同的(相同数量的参数和相同的类型),所以我想我的处理方式是错误的。

有什么建议或者有人可以发布一些我想做的示例代码吗?

最佳答案

首先要检查的是您尝试分配给事件属性的内容是否是一个方法。它必须是属于某个类的过程或函数;它不能是一个独立的子例程。

接下来,请注意,仅仅确认类型的名称匹配是不够的。 Delphi 允许重新定义标识符,因此当您在另一个单元中看到相同的标识符时,您在一个单元中看到的类型名称不一定指的是同一事物。含义甚至可以在一个单元的中间发生变化。例如:

unit Example;

interface

uses Windows;

var
  foo: TBitmap;

implementation

uses Graphics;

var
  bar: TBitmap;

end.

foo 变量的类型为 Windows.TBitmap(一种记录类型),而 bar 的类型为 Graphics.TBitmap >,类类型。

您可以让 IDE 帮助您诊断此问题:按住 Ctrl 键并单击标识符名称,让 IDE 将您带到它们的声明。他们会带你去同样的地方吗?如果没有,那么您可以使用单位名称来限定类型名称。例如,我们可以将上面的 bar 声明更改为:

var
  bar: Windows.TBitmap;

现在它将具有与 foo 相同的类型。检查事件处理程序声明中是否有相同的内容。

关于delphi - 在 Delphi 2007 中设置事件处理程序并收到 "Parameter Lists Differ"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/434126/

相关文章:

delphi - 我可以让 TTreeNode 不可见吗?

c# - 如何使用 DropDownList 的 SelectedIndexChanged 事件

delphi - 列出现有对象以读取和更改其属性的理想方法是什么?

delphi - Delphi 中带有泛型的简单类型

mysql - Delphi 2009 + Zeos + MySQL DBGrid 将字符串显示为 (BYTES)

javascript - 启用和禁用 onkeydown 事件?

javascript - 如何组织多个 View 使用的 Backbone 模型?

delphi - 我如何知道Delphi TDBGrid从数据库完成填充的时间?

delphi - 如何通过代码恢复字段的最后一个值?

delphi - 使用 Delphi 查找目录中最旧文件的最快方法