delphi 函数指针 方法指针
unit Unit1;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
interface
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
Dialogs,
StdCtrls;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
type
TEvent = procedure ()
of object;
TProc
= procedure();
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
TForm1 = class(TForm)
btn1:
TButton;
procedure
btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
var
Form1: TForm1;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
implementation
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
{$R *.dfm}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
procedure
TForm1.btn1Click(Sender: TObject);
begin
showmessage('方法指针的长度是:'+Inttostr(SizeOf(TEvent)));
showmessage('函数指针的长度是:'+Inttostr(SizeOf(TProc)));
end;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
//函数指针是指向函数的32位指针,占4个字节。
//过程的指针结构如下
// PProc
= ^TProc;//过程指针
// TProc = record
// Code:
Pointer;//指向过程的代码
// end;
//方法指针是指向一个结构。方法的指针结构如下
//
PMethod = ^TMethod;//方法指针
// TMethod = record
// Code:
Pointer;//指向方法的代码
//
Data: Pointer;//指向对象的数据
// end;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
end.
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
StdCtrls;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
TEvent = procedure ()
of object;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
= procedure();
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
TForm1 = class(TForm)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
TButton;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
btn1Click(Sender: TObject);
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
end;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
Form1: TForm1;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
TForm1.btn1Click(Sender: TObject);
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
showmessage('方法指针的长度是:'+Inttostr(SizeOf(TEvent)));
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
showmessage('函数指针的长度是:'+Inttostr(SizeOf(TProc)));
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
= ^TProc;//过程指针
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
Pointer;//指向过程的代码
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
PMethod = ^TMethod;//方法指针
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
Pointer;//指向方法的代码
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
Data: Pointer;//指向对象的数据
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)