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