自定义事件传的参数出现乱码解决办法

自定义事件传的参数出现乱码
Delphi(Pascal) code
unit Unit1;

interface

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

type
  TMyClass = class
  private
    FGetStrProc:TGetStrProc;
  public
    property GetStrProc:TGetStrProc read FGetStrProc write FGetStrProc;
    procedure OnGetStrProc;
  end;

  TForm1 = class(TForm)
    btn1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  MyObject:TMyClass;

implementation

{$R *.dfm}

{ TMyClass }

procedure TMyClass.OnGetStrProc;
begin
  if Assigned(FGetStrProc) then FGetStrProc('Hello, World');
end;

procedure ReceiveMsg(const S: string);
begin
  ShowMessage(s);   //此处得到的是乱码
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  TmpEvent:TGetStrProc;
begin
  MyObject := TMyClass.Create;
  TMethod(TmpEvent).Code := @ReceiveMsg;
  TMethod(TmpEvent).Data := MyObject;
  MyObject.GetStrProc := TmpEvent;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  MyObject.OnGetStrProc;
end;

end.



ReceiveMsg收不到正确的字符,不知道是什么原因.

------解决方案--------------------
自己动手解决了
------解决方案--------------------
探讨
TMethod(TmpEvent).Code := @ReceiveMsg;
TMethod(TmpEvent).Data := MyObject;
MyObject.GetStrProc := TmpEvent;

------解决方案--------------------
探讨

已解决,代码改成:
Delphi(Pascal) code
procedure ReceiveMsg1(Address:Integer;const S: string);
begin
ShowMessage(s); //此处得到的正确的值
end;

如果有参数,第一个参数必须是Data.