如题

解决方案 »

  1.   

    相关帖子参考这里
    http://expert.csdn.net/Expert/topic/1552/1552016.xml?temp=.3661463这是louislingjjw(云 意)的方法 
    关于类的方法: (不是类方法,这里指object pascal中的静态方法,相当于C++的成员函数)
      1: 带有隐含参数 self
      2: 方法是方法,数据是数据。
      3:Delphi的方法是一个结构
         type
           TMethod = record
             Code: Pointer;  //方法的入口地址
             Data: Pointer;  //类实例指针(Self参数)
           end;我们调用类的方法,其实分为2个部分,
      1:调用方法的代码,通过类来获得方法入口地址。
      2:访问对象的数据(也可能不访问),通过类的方法的那个隐含参数Self来访问。我做了一个测试:
      TMyObject = class
      private
        FName: string;
      public
        procedure ChangeName(AName: string);
        procedure ShowPrivate;
      end;procedure TMyObject.ChangeName(AName: string);
    begin
      FName := AName; //修改私有变量
      ShowMessage('My name is to be changed to ' + AName);
    end;procedure TMyObject.ShowPrivate;
    begin
      ShowMessage('My name is ' + FName);
    end;procedure TForm1.Button1Click(Sender: TObject);
    type
      TCallFun = procedure(AName: string) of object;
    var
      E: TMyObject;
      M: TMethod;
    begin
      E := TMyObject.Create;
      M.Code := @TMyObject.ChangeName; //这里设置要访问的方法的入口地址
      M.Data := @Pointer(E)^;   //设置Self参数,即类实例指针
      TCallFun(M)('Xbl');
      E.ShowPrivate;  //My name is Xbl
      E.Free;
    end;
      

  2.   

    To : fancier(OP&&C/C++)@Pointer(E)^与Pointer(E)有什么区别吗?
    我在程序中试验了,好像没有发生什么意外?