我正在尝试用 Delphi 写一个程序。此过程获取TControl
派生元素的名称,然后尝试更改某些属性。但是当我尝试这样做时, Delphi 给出了这样的错误:
E2033实际var参数和形式var参数的类型必须相同
程序:
procedure Change_prop(var Control: TControl;height:integer;width:integer);
begin
//......
end;
使用示例:Change_prop(Label1, 50,200);
什么可以解决这个错误...谢谢。
4条答案
按热度按时间vsdwdz231#
您只需要删除Control参数中的var并使其成为值参数。因为 Delphi 对象实际上是作为引用类型实现的,所以你可以调用它们的方法,改变成员字段等。即使你将它们作为一个值或常量参数传递给一个过程。
cotxawn72#
只需删除var-您不需要它来更改Control的属性:
jpfvwuh43#
就像大卫说的,问题在于var。这并不意味着你可以修改TControl的成员,这意味着你可以用另一个完全不同的TControl来替换TControl,因为对象是引用类型。
如果你传递一个对象给一个var参数,你传递的变量必须被声明为与参数完全相同的类型,以保持类型安全。否则,你可以这样做:
zengzsys4#
在我的例子中,当我们传递一个接口作为var参数时,会发生这种情况。
我找到了解决此问题的方法。
首先,有两个bug在一个:
1.编译器无法正确显示错误消息。这是因为项目被设置为外部编译(在MSBuild中)。一旦我将该选项设置为默认值,编译器就能够显示实际的错误消息和发生错误的代码行/单元。
1.我们的框架有接收接口作为var参数的方法。64位编译器不喜欢这样。解决方案是删除var参数OR以从变量中删除[unsafe]装饰器。
_
这样使用: