dll 数组输出和调用有关问题

dll 数组输出和调用问题!
-----------dll部分--------------------
type
 TMyVal = Array [1..2] of Pchar;

function redryxx():TMyVal;stdcall;
var

  aArr: TMyVal;
  aPointer: ^TMyVal;
  adocn : TAdoConnection ;
  adoqry : TADOQuery ;
begin
  adocn := TAdoConnection.Create(nil);
  adocn.ConnectionString := datasys ;
  adocn.LoginPrompt := false ;
  adocn.Open();
  adoqry := Tadoquery.Create(nil);
  adoqry.Connection := adocn ;
  adoqry.SQL.Add( 'SELECT * FROM xm ');
  adoqry.Open;
  while not adoqry.Eof do
  begin
  ls_rtn := adoqry.FieldbyName( 'xm').asstring;
  ls_bh := adoqry.FieldbyName( 'yy').asstring;
  aArr[1] :=pchar(ls_rtn);
  aArr[2] :=pchar(ls_tjbh);
  adoqry.Next ;
   
  end;
  aPointer := @aArr;
  Result := aPointer^;
  adoqry.Close;
  adoqry.Free;
  adocn.Close;
  adocn.Free;
end;
=============EXE调用部分==========================
procedure dd.Button2Click(Sender: TObject);
type
TMyVal = Array [1..2] of Pchar;
 Tredryxx = function():TMyVal;stdcall ;
  var
  DllHandle: THandle;
  procaddr: Tredryxx;
  p1:pchar;
begin
  DllHandle := LoadLibrary('datadll.dll');
  @ProcAddr := GetProcAddress(DllHandle, 'redryxx');
  if @ProcAddr <> nil then
  begin
  p1:=ProcAddr[1];//此处报错,似乎取的不对。。。。。
end;
end;
大家帮忙看看问题错在那了!!!!!!!!!!!!

------解决方案--------------------
function redryxx():TMyVal;stdcall;
改成
procedure redryxx(var Result : TMyVal);stdcall;
调用处相应修改
------解决方案--------------------
看似没问题啊,是不是未返回结果之前的数据就是错误的

调用不变; 把dll改一下做个简单的测试:
type
 TMyVal = Array [1..2] of Pchar;

function redryxx():TMyVal;stdcall;
var
aArr: TMyVal;
aPointer: ^TMyVal;
begin
aArr[1] :='A';
aArr[2] :='B';
aPointer := @aArr;
Result := aPointer^;
end;

可以不用指针aPointer,直接Result:=aArr;