例如,
SetWindowsHookEx方法需要一个TFNHookProc函数
其定义是:
TFNHookProc = function (code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall;
但我把具体操作写在类函数里面了,
如果硬要把函数提出来,就要把好多成员都提出来,感觉很不好。MakeObjectInstance都有办法把TWndMethod转成指针,我想应该有办法才对呀。

解决方案 »

  1.   

    参考一下这篇文章, 也许正是楼主想要的答案:
    http://www.delphifans.com/infoView/Article_216.html
      

  2.   

    谢谢jadeluo(秀峰)
    正是我想要的东东呀!
    这里是原作者在DFW的贴,很有深度,可惜我水平有限,对汇编又一窍不通,他们讨论的内容看得不是很明白,只好直接引用作者的研究成果了。
    http://www.delphibbs.com/delphibbs/dispq.asp?lid=2672562
      

  3.   

    普通函数和方法(类函数)的区别就是方法隐含着一个Self参数procedure TForm1.Button1Click(Sender: TObject); // 方法
    -->>
    procedure Button1Click(Self: TForm1; Sender: TObject); // 普通函数//参考如下代码type
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        function EnumFunc({hwnd: HWND隐含掉}lParam: LPARAM): BOOL; stdcall;
      public
        { Public declarations }
      end;
    //...procedure TForm1.Button1Click(Sender: TObject);
    type
      TEnumFunc = function ({hwnd: HWND隐含掉}lParam: LPARAM): BOOL stdcall of object;
    var
      vEnumFunc: TEnumFunc;
    begin
      vEnumFunc := EnumFunc;
      EnumChildWindows(Handle, TMethod(vEnumFunc).Code, Integer(Self))
    end;function TForm1.EnumFunc(lParam: LPARAM): BOOL;
    var
      hwnd: THandle absolute Self;
    begin
      //Self已经不能用 Memo1也不能访问
      TForm1(lParam).Memo1.Lines.Add(IntToStr(hwnd));
      Result := True;
    end;//其实一般的回调函数都有一个预留参数,在调用的时候写入,在回调的时候读取