怎样把该记录型的动态数组返回到调用该函数的地方?我如下做错在哪?
//A.PAS
type
  Rec_person=record
    name:string;
    age:integer;
end;function abc.dd():Rec_person;
var
  aa:array of Rec_person;
begin
  setlength(aa,100);
  aa[0].name:='aaa';
  aa[0].age:=10;
  result:=aa;      //这里为什么不能这样返回?要怎么做?
end;//B.PAS
type
  Rec_person=record
    name:string;
    age:integer;
end;
procedure aaa();
var
  aa:Rec_person;
begin
  ...
  aa:=dd();  //为什么这里赋值也不行? 
end;要怎么样解决,谢谢!

解决方案 »

  1.   

    function abc.dd():Rec_person;
    var
      aa:array of Rec_person;
    begin
      setlength(aa,100);
      aa[0].name:='aaa';
      aa[0].age:=10;
      result.Assign(aa);      //试试这样
    end;
      

  2.   

    zfmich() : 谢谢
    可是不行提示:
    undeclared indentifier:'Assign'
      

  3.   

    这样试试:
    type
      Rec_person=record
        name:string;
        age:integer;
      end;
      PRec_person=^Rec_person; //定义一个记录指针
    ....
    function abc.dd():PRec_person;
      

  4.   

    wzrlover(流光逝水) :很感谢你,但现在又有一个问题,就是把结构做成指针,然后用指针来返回。但是我把这个结构做成动态数组的,我把结构动态数组给指针返回后,接收不到字符,是空的,怎么回事?
    代码如下:
    //A.PAS
    type
      Rec_person=record
        name:string;
        age:integer;
    end;
    PRec_person=^Rec_person;function abc.dd():PRec_person;
    var
      aa:array of Rec_person;
      pperson:PRec_Person;
    begin
      setlength(aa,100);
      aa[0].name:='aaa';
      aa[0].age:=10;  pperson:=@aa;
      result:=pperson;   //可以返回了   
    end;                     //B.PASprocedure aaa();
    var
      pperson:PRec_person;
    begin
      ...
      pperson:=dd();  //这里可以了,但是我测试有没有值时,是空的。 
    end;请问怎么解决?谢谢!
      

  5.   

    这样不行吧
    function abc.dd():Rec_person;
    var
      aa:array of Rec_person;
    begin
      setlength(aa,100);
      aa[0].name:='aaa';
      aa[0].age:=10;
      result:=aa;   
    end;
    注意这里的aa是局部变量吧,一旦函数返回整个变量就已经被销毁,这里实际上是返回数组的指针吧,既然变量已被销毁了,那么指针也就没有什么意义了
    我觉得如果一定要这样用的话,可以在堆上分配内存或者是使用 var传入参数
      

  6.   

    你定义一个全局变量
    var
     Pperson:PRec_person;function abc.dd():PRec_person;
    var
      aa:array of Rec_person;
      //pperson:PRec_Person;
    begin
      setlength(aa,100);
      aa[0].name:='aaa';
      aa[0].age:=10;  pperson:=@aa;
      result:=Pperson;   //可以返回了   
    end;//B.PASprocedure aaa();
    var
      Myperson:PRec_person;
    begin
      ...
      Myperson:=dd();  //这里可以了,但是我测试有没有值时,是空的。 
    end;试试.
      

  7.   

    不好意思我写错了。应该是:
    //A.PAS
    type
      Rec_person=record
        name:string;
        age:integer;
    end;PRec_person=^Rec_person;
    aa:array of Rec_person;function abc.dd():PRec_person;
    var
      bb:aa;
      pperson:PRec_Person;
    begin
      setlength(bb,100);
      bb[0].name:='aaa';
      bb[0].age:=10;  pperson:=@bb;
      result:=pperson;   //可以返回了   
    end;                    
      

  8.   

    //A.PAS
    type
      Rec_person=record
        name:string;
        age:integer;
    end;function abc.dd():Rec_person;
    //var
    //  aa:array of Rec_person;
    begin
      /*setlength(aa,100);
      aa[0].name:='aaa';
      aa[0].age:=10;
      result:=aa;     
    */
      Result.name := 'aaa';
      Result.age  := 10;这样就行了 
    end;//B.PAS
    type
      Rec_person=record
        name:string;
        age:integer;
    end;
    procedure aaa();
    var
      aa:Rec_person;
    begin
      ...
      aa:=dd();  //为什么这里赋值也不行? 
    end;要怎么样解决,谢谢!
      

  9.   

    GreensPan(GreensPan) :
    如果我有好组数据要返回呢?恐怕这个方法不行吧?