如何用函数名字符串来调用函数

  
比如我有一些函数(过程),我需要掉用他们,能不能通过函数名字符串来调用?有点儿象宏替换的意思!

以下的只能对于过程或不带参数的函数,如果函数带了参数就不能实现了,谁能解决??

type

{$M+}

TMyObj = class

published

function CommandOne: Integer;

// function CommandEx(i:integer): Integer; 这个带了参数就会出现错误

end;

{$M-}

function DoCommand1(const Command: string): Integer;

var

CommandProc: function: Integer of object;

begin

TMethod(CommandProc).Code := TMyObj.MethodAddress(Command);

if Assigned(TMethod(CommandProc).Code) then Result := CommandProc;

end;

function TMyObj.CommandOne: Integer;

begin

result:=1;

end;

{function TMyObj.CommandEx(i:integer): Integer;

begin

result:=i;

end;}

procedure TForm1.Button2Click(Sender: TObject);

begin

DoCommand1('CommandOne');

//DoCommand1('CommandEx(9)'); 这个就会出错

end;

--

WBR, LVT.

PS: A second method by V.Titov :

uses

TypInfo;

type

TCommand = (CommandOne, CommandTwo, CommandThree, CommandFour);

function DoCommand2(const Command: string): Integer;

begin

Result := 0;

case TCommand(GetEnumValue(TypeInfo(TCommand), Command)) of

CommandOne: ..;

CommandTwo: ..;

CommandThree: ..;

CommandFour: ..;

end;

end;

*******************

回复人: chinalian(连长) ( ) 信誉:100 2002-4-20 14:08:16 得分:0

函数指针:

TVisitedEvent = function(FID: integer):integer of object;

你增加如下

function DoCommand2(const Command: string;id: integer): Integer;

var

CommandProc: function(id: interger): Integer of object;

begin

TMethod(CommandProc).Code := TMyObj.MethodAddress(Command);

if Assigned(TMethod(CommandProc).Code) then Result := CommandProc(id); //注意参数

end;

应该就可以调用带参数的。

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值