定义一个函数变量类型, 比如 TRecallFunc = function (...) : returnvaluetype;然后定义一个这种类型的变量(实际上是个指针变量) 比如 var MyFunc : TRecallFunc;给这个变量赋值, 比如 Myfunc := Function1; (实际就是把function1的首地址赋给Myfunc)这个变量作为参数传给调用者. 比如: CallFunction(myfunc);

解决方案 »

  1.   

    举个简单的例子吧,如EnumWindows,
    它的声明是这样的:
    BOOL EnumWindows(
      WNDENUMPROC lpEnumFunc,  // callback function
      LPARAM lParam            // application-defined value
    );
    其中lpEnumFunc就是一个回调函数,看它的声明:
    BOOL CALLBACK EnumWindowsProc(
      HWND hwnd,      // handle to parent window
      LPARAM lParam   // application-defined value
    );若我们用呢,就简单多了。
    function WndEnumProc(H : Hwnd; LParam : TListView): boolean; StdCall;//lParam的类型可以自己定;
    实现如下:
    function WndEnumProc(H: Hwnd; LParam : TListview): boolean;
    var
      Buff : PChar;
    begin
      Result := true;
      GetMem(Buff,255);
      GetWindowText(H, Buff, 255);
      New(X);
      X^.Caption := StrPas(Buff);
      X^.HND := H;
      with LParam.Items.Add do begin
        Caption := X^.Caption;
        Data := X;
      end;
      ................................
      FreeMem(Buff);
    end;调用时就这样好了
    EnumWindows(@WndEnumProc,LongInt(ListView1));
      

  2.   

    首先感想各位。尤其s_cube(竹子) 、yansea(思宏) 两位。
    第二个问题解决了。
    那么第一个问题到底是怎么样呢?比如说。
    假设在某个情况下,我必须在WndEnumProc中引用到类中的某个定义。
    此时定义为全局无疑是无法获得的。
    但是把函数定义加到类的定义中则无法在EnumWindows中调用。这应该如何解决? 还请多多指教。
      

  3.   

    “WndEnumProc中引用到类中的某个定义”,若是按我的理解就写在参数里好了。
    比如是按钮的onclick事件,就声明一个TNotifyEvent类型的变量。
      

  4.   

    我是这样认为:
    类方法都会默认传一个Self指针,而回调函数并不知道如何如何处理这个
    Self指针,所以必须用全局方式声明回调方法。