如何改写这样一个程序?

WGZ8018 2002-05-28 08:24:01
gettextfromsock:string;
var
SockStream:TWinSocketStream;
tmp:String;
rbytes:Integer;
begin
if ClientSocket1.Socket.Connected then
begin
SockStream:=TWinSocketStream.Create(ClientSocket1.Socket,6000);
SetLength(tmp,1024);
FillChar(Pointer(tmp)^,1024,0);
if SockStream.WaitForData(6000) then
begin
rbytes:=SockStream.Read(Pointer(tmp)^,1024);
tmp:=Copy(tmp,1,rbytes);
end;
SockStream.Free;
end;
Result:=tmp;
end;

这是一个在DELPHI中可用的函数,应该怎么改写才能使它C++ BUILDER可用呢?请大家帮帮忙
了。其中ClientSocket1在前面已经定义过了。
...全文
31 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
短歌如风 2002-05-29
  • 打赏
  • 举报
回复
其实原代码中的

SetLength(tmp,1024);
FillChar(Pointer(tmp)^,1024,0);
有点多余,可以改为:
tmp := StringOfChar(#0,1024);
必改写成C++:
tmp := AnsiString::StringOfChar('\0',1024);
短歌如风 2002-05-29
  • 打赏
  • 举报
回复
AnsiString gettextfromsock();
{
TWinSocketStream*SockStream;
AnsiString tmp;
int rbytes;
if (ClientSocket1->Socket->Connected)
{
SockStream = new TWinSocketStream(ClientSocket1->Socket,6000);
tmp.SetLength(1024);
memset((void*)(tmp.c_str()),1024,0);
if (SockStream->WaitForData(6000))
{
rbytes =SockStream->Read((void*)(tmp.c_str()),1024);
tmp:=tmp.SubString(1,rbytes);
}
delete SockStream;
}
return tmp;
}
WGZ8018 2002-05-29
  • 打赏
  • 举报
回复
这样改不行,老是说出错
[C++ Error] E2034 Cannot convert 'AnsiString' to 'void *'
[C++ Error] E2342 Type mismatch in parameter '__s' (wanted 'void *', got 'AnsiString')

ctestcode 2002-05-29
  • 打赏
  • 举报
回复
FillChar(Pointer(tmp)^,1024,0);
可以这样写
MemSet(tmp,1024,0);
WGZ8018 2002-05-29
  • 打赏
  • 举报
回复
to:unsigned
怎么把这函数放在delphi文件中,而又怎么在c++ builder中使用呢?

主要的问题就是delphi中的fillchar和copy以及pointer(tmp)^在c++ builder中分别对应的是什么?
webmin 2002-05-28
  • 打赏
  • 举报
回复
非阻塞方式的Socket,你看看帮助吧,帮助上应该有例程的。
僵哥 2002-05-28
  • 打赏
  • 举报
回复
你就把它放在一个Delphi文件中不就是了吗?还麻烦?

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧