资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 软件开发 >
Advertisement
文章正文

怎样通过函数名称调用函数?

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   

程序中有两个单元a,b。   其中单元a中有一个类c,单元b中有一个类d。  
  在类d中有一个函数e。  
  现在想从类c中调用e,现在从数据库中能够得到单元b的名称和函数的名称。  
  怎样调用e这个函数?

网友回答:

发表者:aiirii

call   a   routine   by   its   name?      
   
  type    
      TForm1   =   class(TForm)    
          Button1:   TButton;    
          procedure   Button1Click(Sender:   TObject);    
          //   Your   routines   (that   youll   run   by   name)   must   be   here    
          procedure   Hello_World(Sender:   TObject);    
      private    
          procedure   ExecuteRoutine(Instance:   TObject;   Name:   string);    
      end;    
   
  var    
      Form1:   TForm1;    
   
  type    
      TExecute   =   procedure   of   object;    
   
  procedure   TForm1.ExecuteRoutine(Instance:   TObject;   Name:   string);    
  var    
      Routine:   TMethod;    
      Execute:   TExecute;    
  begin    
      Routine.Data   :=   Pointer(Instance);    
      //   Returns   the   address   of   a   published   method.    
      Routine.Code   :=   Instance.MethodAddress(Name);    
      if   Routine.Code   =   nil   then   Exit;    
      Execute   :=   TExecute(Routine);    
      Execute;    
  end;    
   
  procedure   TForm1.Button1Click(Sender:   TObject);    
  begin    
      ExecuteRoutine(Form1,   Hello_World);    
  end;    
   
  procedure   TForm1.Hello_World(Sender:   TObject);    
  begin    
      ShowMessage(This   is   a   test);    
  end;    
   
   
 

发表者:linzhengqun

Arri的正解,不过有一点要注意,就是MethodAddress函数只对于Published的方法有用。  
  所以你的函数一定要声明在Published中才行的。

发表者:caven

可以   当Execute   :=   TExecute(Routine);     得到函数后  
  直接Execute就可以了  
 


 

 
热门推荐笔记本: 新华海笔记本
相关文章:
笔记本相关:
IT技术文章:
webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
©2007 popbb.net All Rights Reserved