在Delphi2007中设置事件处理程序并获取;“参数列表不同”;错误

在Delphi2007中设置事件处理程序并获取;“参数列表不同”;错误,delphi,event-handling,delphi-2007,Delphi,Event Handling,Delphi 2007,我正试图在Delphi2007中编写一个使用ActiveX库的类。该类将捕获ActiveX库必须公开自己的事件的事件,该事件将向ActiveX库的事件添加一些信息 底线是,当我将自己的过程分配给要使用的ActiveX库的事件时,我得到一个错误: E2009 Incompatible types: 'Parameter lists differ' 我确信参数列表是相同的(相同数量的参数和相同类型),所以我认为我走错了方向 有什么建议吗?或者有人可以发布一些我尝试执行的示例代码吗?首先要检查的是,

我正试图在Delphi2007中编写一个使用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将您带到它们的声明中。他们会带你去同样的地方吗?如果没有,则可以使用单元名称限定类型名称。例如,我们可以将上面的
声明更改为:

var
  bar: Windows.TBitmap;

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

我在按住Ctrl键的同时单击gabr的建议,发现其中一个参数是一个常量,我没有意识到。我将第二个变量更改为常量,结果很好。谢谢。

如果您将问题编辑为包含参数列表,则更有可能得到相关的答复。可能有一个特定的参数类型很棘手。