delphi2009,版本12.0.3155.16733
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来发送。