D
doby_li
Unregistered / Unconfirmed
GUEST, unregistred user!
//服务端接收数据
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
s,sHex:string;
RcvLength:Integer;
i:Integer;
begin
RcvCount:=RcvCount+1;
RcvLength:=socket.ReceiveLength;
SetLength(s,RcvLength);
socket.ReceiveBuf(s[1],RcvLength); //此行的s[1]这里编译时出现警告信息.
memo1.lines.add('length='+IntToStr(RcvLength)+ ' str=('+s +')');
for i:=1 to RcvLength do
begin
sHex:=sHex+format('%.2x ',[ord(s)]);
end;
memo1.lines.add(IntToStr(RcvCount)+': '+sHex);
end;
现在的问题是:
这段代码在编译时在: socket.ReceiveBuf(s[1],RcvLength);这行出现警告信息:
[Warning] Unit1.pas(146): Unsafe code 'String index to var param'
我查了一下:socket的receiveBuf方法的声明是:
receiveBuf(var Buf;Count:Integer):Integer;
这里的第一个参数类型是:Buf型,而我声明的s是string型.
我就不知道要如何弄了.
(程序能够正常运行)
请问这里的代码应如何改,编译时才不出现这种警告信息.
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
s,sHex:string;
RcvLength:Integer;
i:Integer;
begin
RcvCount:=RcvCount+1;
RcvLength:=socket.ReceiveLength;
SetLength(s,RcvLength);
socket.ReceiveBuf(s[1],RcvLength); //此行的s[1]这里编译时出现警告信息.
memo1.lines.add('length='+IntToStr(RcvLength)+ ' str=('+s +')');
for i:=1 to RcvLength do
begin
sHex:=sHex+format('%.2x ',[ord(s)]);
end;
memo1.lines.add(IntToStr(RcvCount)+': '+sHex);
end;
现在的问题是:
这段代码在编译时在: socket.ReceiveBuf(s[1],RcvLength);这行出现警告信息:
[Warning] Unit1.pas(146): Unsafe code 'String index to var param'
我查了一下:socket的receiveBuf方法的声明是:
receiveBuf(var Buf;Count:Integer):Integer;
这里的第一个参数类型是:Buf型,而我声明的s是string型.
我就不知道要如何弄了.
(程序能够正常运行)
请问这里的代码应如何改,编译时才不出现这种警告信息.