在DELPHI定义回调函数应该将该函数/过程定义为类或数据类型如
TmyCallBack=function():boolean;stdcall;
定义回调函数
function myCallBack:boolean;
begin
  //code.....
end;在调用时使用如下:
procedure MyCallBackSmaple(MyCall:TmyCallBack);
begin
  if assigned(MyCall) then//检查MyCall是否为空
    MyCall;
end;

解决方案 »

  1.   

    //这样的情况最好自己去VCL源代码里分析分析//from
    //Forms.pas          FClientInstance := Classes.MakeObjectInstance(ClientWndProc);
              FDefClientProc := Pointer(GetWindowLong(FClientHandle, GWL_WNDPROC));
              SetWindowLong(FClientHandle, GWL_WNDPROC, Longint(FClientInstance));
    //...
        SetWindowLong(FHandle, GWL_WNDPROC, Longint(FObjectInstance));//不管是C还是Pascal,指针都是很重要的数据类型,因为一切数据都必须有存放的空间及其存放的内存地址
    //Object Pascal中通过运算符@或者函数Addr取得数据存放的位置function EnumWindowsProc(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;
    begin
      TMemo(lParam).Lines.Add(Format('%.4x', [hwnd]));
      Result := True;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      EnumWindows(Addr(EnumWindowsProc), Integer(Memo1));
      //EnumWindows(@EnumWindowsProc, Integer(Memo1));//Addr -> @
    end;
      

  2.   

    VCL中属性其实就是指向函数的指针,看看Help自然就知道了
      

  3.   

    但是我想得到一个类成员函数的地址。
    有这些方法都不行。
    全局函数可以但成员函数就不行了。
    Help me!
      

  4.   

    function MethodAddress(const Name: ShortString): Pointer;
      

  5.   

    同意 zswang(伴水)(流浪在北京).
      

  6.   

    function MethodAddress(const Name: ShortString): Pointer;
    这是什么意思?
    可不可给我一个详细一些的?我的问题:type 
      TMyClass = class
         private 
            procedure ThreadListen(value :Longint);stdcall;    
          .
          .
          .
       end;
      
    现在我需要得到 ThreadListen 的地址?
    如何去做?
      

  7.   

    也许我明白了多谢老王!我去try 一 try !