中国开发网: 论坛: 程序员情感CBD: 贴子 294235
pcplayer: 我几分钟前写的例子,运行通过没问题。里面就用 New(MyPointer) 的方法。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
Dialogs, StdCtrls;

type
TMyMethod = procedure(S:string) of object;

PMethod = ^TMethod;

TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
FList:TList;
procedure SayHello(S:string);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.SayHello(S: string);
begin
Memo1.Lines.Add('Hello,'+S);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FList := TList.Create;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FList.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
APointer:PMethod;
begin
New(APointer);
APointer^.Code:=Addr(TForm1.SayHello);
APointer^.Data:=Self;

FList.Add(APointer);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
APointer:PMethod;
begin
APointer:=FList[0];

TMyMethod(APointer^)('hahah');
end;

end.

-------------------

上面的代码里没有做释放。应该有地方用 Dispose(FList.Items[0]) 的方式把放进去的指针分配的内存释放掉。

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录