我在一个中定义了一个函数
procedure S(var a: array of integer);
var
  k: array of integer;
begin
  k:= @a ;
  SetLength(k,1);
  k[0] := 1;
end;我在一个exe文件中写
var
  a: array of integer;
begin
  SetLength(a, 0)
  S(a);//调用DLL中的函数,给数据长度加1,
  ShowMessage(IntToStr(Length(a)));  //结果显示为0,为什么不是1呢
end

解决方案 »

  1.   

    要重新定义一个类型
    type
      TMyArray: array of integer;
    ...
    procedure S(aArray: TMyArray);
    直接用数组不行
    另外,可能调用S之前要用setLength给a分配空间。
    或者直接返回function S: TMyArray;
      

  2.   

    我改成
    type
      TMyArray: array of integer;
    现在是可以了
    但是改成
      TMyArray: array of TStrings;
    就又不行了
      

  3.   

    TStrings是类,你知道TStrings 有多大,每个占用多大内存吗
    建议你传链表,想用多大就new一个出来,然后挂在后面就可以了