首页  编辑  

不定参数

Tags: /超级猛料/Language.Object Pascal/内嵌汇编、函数、过程/   Date Created:

不定参数

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对象的方法的,反而容易实现你的要求.