从Delphi 7转换为Delphi 10.3时参数列表不兼容

问题描述

我有一个正在尝试转换的应用程序,但是服务器通信存在一些问题。这行:

procedure UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);

这给了我这个错误

UDPServer.OnUDPRead引用的UDPServerUDPRead方法具有不兼容的参数列表。删除参考?

该过程的用法如下:

procedure TFrmMain.UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
var
  Buffer: Tarray1024ofChar ;
  count: Integer;
begin
  count := AData.Size;
  if count > Length(Buffer) then exit;
  AData.Read(Buffer,count);
  if UDPServerActive then DataReceived(count,ABinding.PeerIP,ABinding.PeerPort,Buffer);
end;

这有什么问题?我应该改变什么?

解决方法

>= YourStartingDateTime) )事件的签名从Indy 9更改为Indy 10。

在Indy 9中,当数据包到达时,会为您提供一个TIdUDPServer.OnUDPRead对象,该对象包装原始数据。

在Indy 10中,当数据包到达时,将为您提供TStream字节的原始数据数组。

因此,您需要相应地更新代码,例如:

TIdBytes

如果您可以更改type // Char is a 1-byte AnsiChar in D7,but is a 2-byte WideChar in D2009+! Tarray1024ofChar = array[0..1023] of AnsiChar{Char} // or,use Byte instead... ... procedure TFrmMain.UDPServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); var Buffer: Tarray1024ofChar; count: Integer; begin count := Length(AData); if count > Length(Buffer) then exit; BytesToRaw(AData,Buffer,count); if UDPServerActive then DataReceived(count,ABinding.PeerIP,ABinding.PeerPort,Buffer); end; 以接受DataReceived()(或PAnsiChar)而不是PByte,则可以通过取消本地{ {1}}个变量:

Tarray1024ofChar