怎样用函数名为参数, 在调用函数中调用"函数入口"为名的函数? 300美金请高手.(300分)

  • 主题发起人 主题发起人 sileo
  • 开始时间 开始时间
phenix_sd提供的能解决问题.

tseug的办法解决了传string类型的函数名.
但用到ExecuteRoutine(Form1, 'Hello_World')

假如, 我的函数'Hello_World'是放在一个UNIT.PAS文件内,它没有FORM,
那怎么办呢?

 
//我的函数'Hello_World'是放在一个UNIT.PAS文件内,它没有FORM,那怎么办呢?
传入 Application 或 Application.Handle 试一试(我猜的)
 
我明天试一下
 
再过几个钟, 我就要回老家了。
过年后在跟来向大家学习了,

在老家是不能上网的。在穷上沟有电脑还不行,没电话。
 
this way is not good, the better way is use DLL.
 
同意楼上,用dll吧
 
看来这里没有人想到用TStringList实现——

type
ProcPointer=procedure;
var
ProList:TStringList;

procedure A;
begin
MessageDlg('This is A!',mtInformation,[mbOK],0);
end;
procedure B;
begin
MessageDlg('This is B!',mtInformation,[mbOK],0);
end;
procedure DoProc(Name:String);
var
n:Integer;
begin
n:=ProList.IndexOf(Name);
if n>=0 then
ProcPointer(ProList.Objects[n]);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DoProc('A');
DoProc('B');
end;

initialization //编译器不是万能的,要实现你的要求,必须手工绑定
ProList:=TStringList.Create;
ProList.Sorted:=true;
ProList.AddObject('A',TObject(@A));
ProList.AddObject('B',TObject(@B));

finalization
ProList.Free;

end.

——怎么样?不算复杂吧。
 
我再给你提供一种方法: 把所有的参数都装到一个TList里面,
这样,以后就 sellect 就是固定的一个参数,自己在内部判断
参数的个数. 当然也可以用 Variant
 
我认为这个是最好的!但是如果函数的参数很多就无能为力了
type
{$M+}
TMyObj = class
published
procedure myfun1;
procedure myfun2;
function myfun3(str:string):integer

end;
{$M-}

implementation

{$R *.dfm}

function tform1.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;

procedure tmyobj.myfun1;
begin
showmessage('this is fun1');
end;

procedure tmyobj.myfun2;
begin
showmessage('this is fun2');
end;

function tmyobj.myfun3(str:string):integer;
begin
showmessage(str);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
DoCommand1('myfun1');
DoCommand1('myfun2');
DoCommand1('myfun3')
// 问题是这样就会发生错误
end;
 


如何对付不定项的参数和不同类型的参数和返回值?


 
函数指针

type Myprocedure=procedure(s: string);

procedure my1(s: string);
begin
.....
end;

procedure my2(s: string);
begin
.....
end;


procedure YourProcedureName(i: integer, my: MyProcedure)
begin
....
my('jhhfd')

end;

YourProcedureName(1,my1);
YourProcedureName(1,my2);
会调函数就是这个样子的
 
呵呵,你这个我问题我已经[red]搞定[/red]了,包括[blue]不定项的参数、参数类型、变参、返回值[/blue][:)]

http://www.delphibbs.com/delphibbs/dispq.asp?lid=1289838

 
你应该熟悉一下回调函数的概念,用函数类型用为函数的参数。
 
后退
顶部