如何将动态数组的长度更改为"out"参数?

Iva*_*nov 0 delphi

我写了一个函数,它将一个物理包中收到的两个或多个数据包分开.但是,编译器并不欣赏我的努力.每个数据包的大小都在数据包标头的前两个字节中,即6个字节.因此,一个真正的数据包=它的前两个字节+ 6.如果有多个数据包,我会发现这是多少.

procedure SeparatePackets(packet:pointer;size:word; out Result:Array of pointer; out number:byte);
var position:byte; //position
begin
  position:= 0;
  number:= 0;
  SetLength(Result,0); //<< ERROR

  while(PWord(Cardinal(packet) + position)^ + 6 <> size) do  //while the first two bytes + 6(packet header)
  begin
    SetLength(Result,Length(Result) + 1); //inc the length << ERROR
    Result[number] := Cardinal(packet) + position;
    position := Result[number] + PWord(Cardinal(packet) + position)^ + 6;
    inc(number);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

我用'<< ERROR'标记了编译时错误.错误是一个 - '不兼容的类型'.

我从来不知道在一个物理数据包中可能收到的数据包数量,所以如果数量增加,我想增加数组的长度.

我该如何解决我的错误?

ba_*_*end 5

如何创建新类型?我认为它应该有效.

type
  TPntArray = array of Pointer;
Run Code Online (Sandbox Code Playgroud)


Ond*_*lle 5

声明一个新类型:

type
  TPointerDynArray = array of Pointer;

procedure SeparatePackets(Packet: Pointer; Size: Word; out Result: TPointerDynArray; out Number: Byte);
begin
  Result := nil; // unnecessary: dynamic out parameters are initialized to zero by compiler
  ...
end;
Run Code Online (Sandbox Code Playgroud)