Delphi 将字节数组转换为 TBytes - UDP 重定向?

wit*_*rup 2 delphi udp casting type-conversion delphi-xe3

procedure TForm1.UDPUDPRead(AThread: TIdUDPListenerThread; 
                              AData: array of Byte; ABinding: TIdSocketHandle);
var
  buffer : TBytes;
begin
  SetLength(buffer, Length(AData));
  buffer := @AData[0];
 end;
Run Code Online (Sandbox Code Playgroud)

此代码导致访问冲突。

什么是要转换的正确方法字节数组TB的在Delphi XE3?

Dav*_*nan 5

您需要复制缓冲区。

Count := Length(AData);
SetLength(buffer, Count);
if Count <> 0 then
  Move(AData[0], buffer[0], Length(AData));
Run Code Online (Sandbox Code Playgroud)

我有一种感觉,Indy 的这一部分被 Embarcadero 搞砸了。请注意按值传递数组的可疑性。如果我记得,来自 repo 的 Indy 版本更好。