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

解决方案 »

  1.   

    A单元引用B单元,在程序中创建类C,在类C中调用B单元D类中的E函数应该可以。
      

  2.   

    unit a ;uses b ;
    var x : Td ;
    begin
      try
        x:=Td.Create();
        x.e;
      finally
       x.free ;
      end;
    end;
      

  3.   

    数据库中能够得到单元b的名称和函数的名称?
    不写在UNIT中而在数据库中可以调用吗?
    顶一下了
      

  4.   

    ======================================
    a单元unit a ;uses b ;var x : Td ;
    begin
      try
        x:=Td.Create();
        x.e;
      finally
       x.free ;
      end;
    end;
    ===========================
    b单元
    unit binterface
      type 
       Tb=Class(...)
       private
        //注意:不能申明在这里
       public
         function e:返回类型;
       end;
    implementation  function Td.e:返回类型;
      begin
        ...........
      end;
      end.
      

  5.   

    call a routine by its name?  type 
      TForm1 = class(TForm) 
        Button1: TButton; 
        procedure Button1Click(Sender: TObject); 
        // Your routines (that you'll 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; 
      

  6.   

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

  7.   

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