您的位置:首页 > 编程语言 > Delphi

Delphi2009的Bug:WinSocket元件接收和发送的编码不一致(在Delphi XE版本中已做修改)

2011-03-31 11:47 513 查看

Delphi2009的Bug:WinSocket元件接收和发送的编码不一致

转载自:http://multilanguage.tech.topzj.com/archiver/tid-14132.html

Delphi2009的Bug:WinSocket元件接收和发送的编码不一致
delphi2009,版本12.0.3155.16733,Socket元件的发送接受字串有一个bug,可能是支持unicode时漏改了。

在Delphi XE版本中已做修改。

ScktComp.pas

发送用Ansi码

function TCustomWinSocket.SendText(const s: AnsiString): Integer;
begin
Result := SendBuf(Pointer(S)^, Length(S) * SizeOf(AnsiChar));
end;

接收用Unicode码
function TCustomWinSocket.ReceiveText: string;
begin
SetLength(Result, ReceiveBuf(Pointer(nil)^, -1));
SetLength(Result, ReceiveBuf(Pointer(Result)^, Length(Result)));
end;

可以这样来修正它。
1、简单的修改,都用Ansi

直接把function TCustomWinSocket.ReceiveText: string;改成function TCustomWinSocket.ReceiveText: AnsiString;

2、都用Unicode

function TCustomWinSocket.SendText(const s: String): Integer;
begin
Result := SendBuf(Pointer(S)^, Length(S) * SizeOf(Char));
end;

function TCustomWinSocket.ReceiveText: string;
begin
SetLength(Result, ReceiveBuf(Pointer(nil)^, -1) div SizeOf(Char));
SetLength(Result, ReceiveBuf(Pointer(Result)^, Length(Result)*SizeOf(Char)) div SizeOf(Char));
end;

ScktComp.pas是在rtl.bpl,所以无法重编译rtl.dpk。删掉lib下的ScktComp.dcu。如果你的程序不用RuntimePackage编译的化修改没问题,否则没办法,只能改用SendBuffer或SendStream来发送。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐