필자는 하나의 물리적 패킷에서 수신 된 두 개 이상의 패킷을 분리하는 함수를 작성했습니다. 그러나 컴파일러는 내 노력에 감사하지 않습니다. 모든 패킷의 크기는 6 바이트 인 패킷 헤더의 처음 2 바이트에 있습니다. 실제 패킷 하나 = 처음 2 바이트 + 6입니다. 둘 이상의 패킷이있는 경우 찾는 방법입니다. 'out'매개 변수로 동적 배열 길이를 변경하는 방법은 무엇입니까?
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;
나는 '< < ERROR'로 컴파일시 에러를 표시했다. 오류는 '호환되지 않는 유형'입니다.
숫자가 증가하면 배열의 길이를 늘리고 싶었 기 때문에 하나의 물리적 패킷에서받을 수있는 패킷의 수를 알지 못합니다.
어떻게 오류를 해결할 수 있습니까?
새 유형을 정의하지 않으려면 TArrayNoInit이을보십시오. –