|
function MyFunc(Params: Array of const):Variant;r3wLinux联盟 varr3wLinux联盟 I: Integer;r3wLinux联盟 beginr3wLinux联盟 Result := '';r3wLinux联盟 for I := 0 to High(Args) dor3wLinux联盟 with Args[I] dor3wLinux联盟 case VType ofr3wLinux联盟 vtInteger: ...r3wLinux联盟 vtBoolean: ...r3wLinux联盟 vtChar: ...r3wLinux联盟 vtExtended: ...r3wLinux联盟 vtString: ...r3wLinux联盟 vtPChar: ...r3wLinux联盟 vtObject: ...r3wLinux联盟 vtClass: ...r3wLinux联盟 vtAnsiString: ...r3wLinux联盟 vtCurrency: ...r3wLinux联盟 vtVariant: ...r3wLinux联盟 vtInt64: ...r3wLinux联盟 end;r3wLinux联盟 end;r3wLinux联盟 r3wLinux联盟 r3wLinux联盟 调用:r3wLinux联盟 r3wLinux联盟 r3wLinux联盟
r3wLinux联盟 varr3wLinux联盟 afunc:TFUNC;r3wLinux联盟 begin;r3wLinux联盟 afunc := GetFunc('MyFunc');r3wLinux联盟 afunc([1,2.34,'abcde']);r3wLinux联盟
|
r3wLinux联盟 r3wLinux联盟 GetFunc根据一个字符串返回一个TFUNC变量(函数指针);r3wLinux联盟 r3wLinux联盟 afunc([1,2.34,'abcde']);是用一个整型、一个浮点型和一个字符串型参数去调用。r3wLinux联盟 r3wLinux联盟 假设现在调用的是MyFunc:r3wLinux联盟 r3wLinux联盟 在循环中:(i := 0 to 2)r3wLinux联盟 r3wLinux联盟 r3wLinux联盟
r3wLinux联盟 i=0:VType=vtInteger,VInteger=1r3wLinux联盟 r3wLinux联盟 i=1:VType=vtextended,VExtended^=2.34r3wLinux联盟 r3wLinux联盟 i=2:VType=vtAnsiString,string(VAnsiString)='abcde'r3wLinux联盟
|
r3wLinux联盟 r3wLinux联盟 详见TVarRec的帮助.r3wLinux联盟 r3wLinux联盟 不过这种方法无法得到函数的参数信息,调用者必须保证参数匹配,或所有的函数都要能处理任意个数任意类型 的参数,更好的方法是使用Automation对象,由于内容太多,我就不多讲了,用Delphi编写Automation对象非赏容 易,调用也很容易,因为Delphi内置了对Automation对象的支持,可要按字符串调用反而要自己去做了,你可以看 一下MSDN中IDispatch的帮助.C++Builder由于没有Automation对象的内置支持,所以是用字符串来查找 Automation对象的方法的,反而容易实现你的要求.r3wLinux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论 |
|