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

此代码导致访问冲突。

在 Delphi XE3 中从字节数组转换为TBytes的正确方法是什么?

4

1 回答 1

5

您需要复制缓冲区。

Count := Length(AData);
SetLength(buffer, Count);
if Count <> 0 then
  Move(AData[0], buffer[0], Length(AData));

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

于 2013-10-28T17:48:40.350 回答