如何写不定参数的函数

时间:2010-03-02 18:02:12  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:br />vtBoolean: ...vtChar: ...vtExtended: ...vtString: ...vtPChar: ...vtObject: ...vtClass: ...vtAnsiString: ...vtCurrency: ...vtVariant: ...vtInt64: ...end;end;调用:varafunc:TFUNC...
  正文:function MyFunc(Params: Array of const):Variant;
var
I: Integer;

begin

Result := '';

for I := 0 to High(Args) do

with Args[I] do

case VType of

vtInteger: ...

vtBoolean: ...

vtChar: ...

vtExtended: ...

vtString: ...

vtPChar: ...

vtObject: ...

vtClass: ...

vtAnsiString: ...

vtCurrency: ...

vtVariant: ...

vtInt64: ...

end;

end;

调用:

var

afunc:TFUNC;

begin;

afunc := GetFunc('MyFunc');

afunc([1,2.34,'abcde']);

GetFunc根据一个字符串返回一个TFUNC变量(函数指针);

afunc([1,2.34,'abcde']);是用一个整型、一个浮点型和一个字符串型参数去调用。

假设现在调用的是MyFunc:

在循环中:(i := 0 to 2)

i=0:VType=vtInteger,VInteger=1

i=1:VType=vtextended,VExtended^=2.34

i=2:VType=vtAnsiString,string(VAnsiString)='abcde'

详见TVarRec的帮助.

不过这种方法无法得到函数的参数信息,调用者必须保证参数匹配,或所有的函数都要能处理任意个数任意类型 的参数,更好的方法是使用Automation对象,由于内容太多,我就不多讲了,用Delphi编写Automation对象非赏容 易,调用也很容易,因为Delphi内置了对Automation对象的支持,可要按字符串调用反而要自己去做了,你可以看 一下MSDN中IDispatch的帮助.C++Builder由于没有Automation对象的内置支持,所以是用字符串来查找 Automation对象的方法的,反而容易实现你的要求.

"如何写不定参数的函数"由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Language/Delphi/12995.html


关键字:

关于《如何写不定参数的函数》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td