为什么procedure MyProc(var AVar);可以通过编译?
解决方案 »
- 动态创建memo,照抄都在编译时通不过。解决即结帖
- 怎么样快速把adodataset的数据导出到Excel中?
- 请问数据库导航控件(TDBNavigator) 只有图标,怎样才能加上文字标签说明?谢谢
- 遇到一个小小的问题,请大家帮忙??
- 在sql的存储过程中怎样对记录进行循环?
- 请各位帮忙,有关DBGrid显示问题
- 谁知道关于RICHEDIT \MEMO的基本操作(在线)
- Com组件在使用后,退出程序时报错!!100分求救!
- websnap开发ISAPI的问题
- 请帮忙看看这D7的代码在XE4里该怎样改法
- flash问题
- 象联众四国军棋参谋,升级助手之类的软件是怎么能够捕获到数据的,急...请高手指点,最好留下代码
请教啦.可以告诉我原因吗? 没有类型呀.
使用无类型参数的目的是:让函数和过程可以处理多种类型,而这些类型又没有共同的父类型可以代表他们。
1、这种限制可以由编译器给定(主要是VCL函数库本身使用这种方式,当传入参数类型不符合规定时,不能通过编译)。比如:
procedure SetLength(var S; NewLength: Integer);
var
I: Integer;
begin
SetLength(I, 10); //不能通过编译,因为编译器规定SetLength只能接受字符串和动态数作作为参数
end;
2、在函数的实现中给定,如如果传入的参数不符合要求,不作处理或者抛出异常。这种情况通常适用于用户定义无类型参数。—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
事实上在调用MyProc的时候是把AVar的地址给压栈,所有的地址都是4个字节,所以delphi知道怎么编译MyProc,所以编译就通的过。
象procedure MyProc(AVar)就不能通过编译。因为delphi不知道该为AVar留多少空间。
procedure MyProc(var AVar);和procedure MyProc(var AVar: Variant);有区别吗?
1、一个是无类型参数,一个是有类型参数
2、VARIANT并不能代笔所有类型的数据,如指针类就不可以。—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————