DELPHI嵌套过程的调用由外部中转了一次后变量访问出错,请教如果写才对

procedure c(Fun:pointer);
type F=procedure(s:string);
begin
    F(Fun)('c say test');
end;
procedure a();
var s1:string;
         procedure b(s:string);
        begin
          s1:=s;   //此处内存访问出错,请教,该如何改? 如果s1仍保持是a()的局部变量是否有其他方法解决?
        end;
begin
    c(@b);
        showmessage(s1);
end;

type F=procedure(s:string);
这是过程,不是字符串,类型不匹配

是过程没错的呀 运行到s1=s这一步才出错的,这一步s的值也没错的呀!
b过程在a和c都能成功调用,但是变量访问出错问题是什么原因呢?

是过程没错的呀 运行到s1=s这一步才出错的,这一步s的值也没错的呀!
b过程在a和c都能成功调用,但是变量访问出错问题是什么原因呢?