新手,学回调味函数,但出错误,请教原因,错误提示说:'regular procedure and method pointer
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;type
  TBackProc = procedure (Msg: String); stdcall;
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure MsgInfo(Msg: String); stdcall;
    procedure Test(BackProc: TBackProc; Msg: String);
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
  Test(MsgInfo,'测试回调函数');
end;procedure TForm1.MsgInfo(Msg: String);
begin
  ShowMessage(Msg);
end;procedure TForm1.Test(BackProc: TBackProc; Msg: String);
begin
  BackProc(Msg);
end;end.

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TBackProc = procedure (Msg: String); stdcall;
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
        
        procedure Test(BackProc: TBackProc; Msg: String);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure MsgInfo(Msg: String); stdcall;
    begin
      ShowMessage(Msg);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Test(MsgInfo,'测试回调函数');
    end;procedure TForm1.Test(BackProc: TBackProc; Msg: String);
    begin
      BackProc(Msg);
    end;end.
      

  2.   

    procedure TForm1.MsgInfo(Msg: String);
    begin
      ShowMessage(Msg);
    end;要修改为
    procedure MsgInfo(Msg: String);如果是类函数,它压入堆栈的参数不同
      

  3.   

    问题已经解决,给分先,谢谢Tang