我写了一个函数,它将一个物理包中收到的两个或多个数据包分开.但是,编译器并不欣赏我的努力.每个数据包的大小都在数据包标头的前两个字节中,即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'标记了编译时错误.错误是一个 - '不兼容的类型'.
我从来不知道在一个物理数据包中可能收到的数据包数量,所以如果数量增加,我想增加数组的长度.
我该如何解决我的错误?
声明一个新类型:
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)
| 归档时间: |
|
| 查看次数: |
1517 次 |
| 最近记录: |