type IShape=interface(IInterface) procedure Draw; end 实现回调类
type TRect=class(TObject,IShape) protected function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; function _AddRef: Integer; stdcall; function _Release: Integer; stdcall; public procedure Draw; end;
type TRound=class(TObject,IShape) protected function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; function _AddRef: Integer; stdcall; function _Release: Integer; stdcall; public procedure Draw; end; 使用回调对象
procedure MyDraw(shape:IShape); var shape:IShape; begin shape.Draw; end; 假如传入的对象为TRect,那么画矩形;假如为TRound,那么就为圆形。用户也可以按照自己的意图来实现IShape接口,画出自己的图形:
type TCallback=Class procedure ClickFunc(sender:TObject); end; procedure Tcallback.ClickFunc(sender:TObject); begin showmessage('the caller is clicked!'); end; 窗体对象:
type TCustomFrm=class(TForm) public procedure RegisterClickFunc(cb:procedure(sender:Tobject) of object); end;
procedure TcustomFrm..RegisterClickFunc(cb:TNotifyEvent); begin self.OnClick=cb; end; 使用方法:
var frm:TcustomFrm; begin frm:=TcustomFrm.Create(application); frm.RegisterClickFunc(Tcallback.Create().ClickFunc); end; 3 回调在分布式计算中的应用(CORBA)
interface CallBack { void OnEvent(in long Source,in long msg); }; interface Server { long RegisterCB(in CallBack cb); void UnRegisterCB(in long hCb); }; }; 客户端首先通过同步方式调用服务端的接口RegistCB,用来注册回调接口CallBack。服务端收到该请求以后,就会保留该接口引用,假如发生某种事件需要向客户端通知的时候就通过该引用调用客户方的OnEvent函数,以便对方及时处理。