Delphi中如何使用不定参数

时间:2010-01-26 14:50:40  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:bsp;case VType of    vtInteger: ...    vtBoolean: ...    vtChar: ...    vtExtended: ...    vtString: ...    vtPChar: ...    vtObject: ...    vtClass: .....
  正文:

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


Delphi中如何使用不定参数》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Language/Delphi/2010-01-26/12449.html


关键字:

关于《Delphi中如何使用不定参数》文章的评论

站内搜索: 高级搜索

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