如果是string的话可用function ...(var L:TStringList):...

解决方案 »

  1.   

    function TAccServer.OpenSQL(const strSQL: WideString): OleVariant;
    Var
    CDbRecordSet : _RecordSet;
    dwRow, dwCol : integer;
    begin
    Result := NULL;
      CDbRecordSet := CoRecordSet.Create;  If CDbRecordSet <> Nil Then
        Try
          Try
            CDbRecordSet.Open(strSQL, FConnection, adOpenStatic, adLockReadOnly, adCmdText);
          Except on E : Exception do
            SysLog(hLog, LOG_ERR, E.Message);
          End;      If CDbRecordSet.State = adStateOpen Then
            Try
              If (CDbRecordSet.RecordCount > 0) then
              Begin
                {建立可变数组}
                Result := VarArrayCreate([0, CDbRecordSet.RecordCount - 1, 0,
                    CDbRecordSet.Fields.Count - 1], varVariant);
                If VarIsArray(Result) Then
                Begin
                  {*** 复制结果值 ***}
                  CDbRecordSet.MoveFirst;
                  For dwRow := 0 to CDbRecordSet.RecordCount - 1 do
                  Begin
                    For dwCol := 0 to CDbRecordSet.Fields.Count - 1 do
                      Result[dwRow, dwCol] := CDbRecordSet.Fields.Item[dwCol].Value;
                    CDbRecordSet.MoveNext;
                  End;
                End;
              End;
            Finally
              CDbRecordSet.Close;
            End;
        Finally
          CDbRecordSet := Nil;
        End;
    end;
      

  2.   

    楼上的好像太复杂了.例子:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TMyArray = array[1..10] of Integer;
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        function GetMyArray: TMyArray;
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
    var
      i: Integer;             
      i: integer;
      a: TAyyay;
    begin
      for i := 1 to 10 do
        a[i] := i;
      Result := a;
      s: string;
      b: TMyArray;
    begin
      b := GetMyArray;
      s := '';
      for i := 1 to 10 do
        s := s + IntToStr(b[i]) + ',';
      Caption := s;
    end;function TForm1.GetMyArray: TMyArray;
    var
      i: integer;
      a: TMyArray;
    begin
      for i := 1 to 10 do
        a[i] := i;
      Result := a;
    end;end.
      

  3.   

    可以使用动态数组,然后再返回指针后读取返回值。如下:TrtArr = record      //定义返回结构
       size : integer;   //返回数组的长度
       p : pointer       //返回的动态数组
    end; function getArray() : TrtArr;
    var arrNo : array of integer;
        i : integer;
        rt : TrtArr;
    begin
      SetLength(arrNO, 10);//定义动态数组长度并赋值
      for i:=0 to 9 do
          arrNo[i] := i;
      
      rt.p:=AllocMem(SizeOf(arrNo));
      rt.size := SizeOf(arrNo));
      rt.p := Copy(arrNo);//将数组内容拷贝到指针
      result := rt;   //返回 
    end;接收:
    var arrNo : array of integer;
        arr : TrtArr;
        i,n : integer;
    begin
      arr := getArray();
      arrNo := arr.buffer;
      for i:=0 to arr.size-1 do //这里就可对接收到的数组读取了
          n := arrNo[i];
    end;其实动态数组就是一个指针。
      

  4.   

    如有问题请OICQ:2850178
    如没问题给分吧,别浪费我打这么多字:)
      

  5.   

       我要返回的是一个动态数组呀,纬数也不一定,不是静态的(我能解决)
    楼上的朋友的程序在arrNo := arr.buffer出错 ,提示:[Error] Unit1.pas(52): Undeclared identifier: 'buffer'