我是个delphi菜鸟,请问大家个问题,如何将pointer的内容转成array of char在网络上传输!我做了个小程序试验下面这样就正常:
procedure TActiveFormX.DSCNSender1DSTransmitters1SendBuffer(Sender: TObject;
Buffer: Pointer; Count, FrameID: Integer);var ChatDataPackage:TChatDataPackage;
_ToIP,_SendMsg,_ToAccount:string;
_ToPORT:Integer;
tempItem:TListItem;
stream :TMemoryStream;
ArrChar : array[0..6000] of char;
begin
DSCNReceiver2.WriteBuffer(Buffer,Count) ;
end;
这样就不正常:
procedure TActiveFormX.DSCNSender1DSTransmitters1SendBuffer(Sender: TObject;
Buffer: Pointer; Count, FrameID: Integer);var ChatDataPackage:TChatDataPackage;
_ToIP,_SendMsg,_ToAccount:string;
_ToPORT:Integer;
tempItem:TListItem;
stream :TMemoryStream;
ArrChar : array[0..6000] of char;
begin stream := TMemoryStream.Create;
stream.WriteBuffer(Buffer,count);
stream.Position := 0;
DSCNReceiver2.WriteBuffer(stream.Memory,stream.Size) ;
stream.Free;
end;
我不大懂delphi,但我的目的是想把Pointer所指向的内容放TMemoryStream中,利用stream.readBuffer方法,将流中的内容读到ArrChar : array[0..6000] of char中通过网络传输到另一端,另一端接收后,把ArrChar : array[0..6000] of char写到流中,不知道这样的思路对不对,请高手指教。本来通过Indy组件可以不转成array of char,但我想在包中再加点东西后再发,请大家不吝赐教,菜鸟定当重分相谢!!!
procedure TActiveFormX.DSCNSender1DSTransmitters1SendBuffer(Sender: TObject;
Buffer: Pointer; Count, FrameID: Integer);var ChatDataPackage:TChatDataPackage;
_ToIP,_SendMsg,_ToAccount:string;
_ToPORT:Integer;
tempItem:TListItem;
stream :TMemoryStream;
ArrChar : array[0..6000] of char;
begin
DSCNReceiver2.WriteBuffer(Buffer,Count) ;
end;
这样就不正常:
procedure TActiveFormX.DSCNSender1DSTransmitters1SendBuffer(Sender: TObject;
Buffer: Pointer; Count, FrameID: Integer);var ChatDataPackage:TChatDataPackage;
_ToIP,_SendMsg,_ToAccount:string;
_ToPORT:Integer;
tempItem:TListItem;
stream :TMemoryStream;
ArrChar : array[0..6000] of char;
begin stream := TMemoryStream.Create;
stream.WriteBuffer(Buffer,count);
stream.Position := 0;
DSCNReceiver2.WriteBuffer(stream.Memory,stream.Size) ;
stream.Free;
end;
我不大懂delphi,但我的目的是想把Pointer所指向的内容放TMemoryStream中,利用stream.readBuffer方法,将流中的内容读到ArrChar : array[0..6000] of char中通过网络传输到另一端,另一端接收后,把ArrChar : array[0..6000] of char写到流中,不知道这样的思路对不对,请高手指教。本来通过Indy组件可以不转成array of char,但我想在包中再加点东西后再发,请大家不吝赐教,菜鸟定当重分相谢!!!
解决方案 »
- 怎么保存 Word 文档?
- 请教一个数据暂存的问题!ADO+SQL2K。
- ?????WebService如何实现身份验证?
- 如何解决在Timage中连续绘制图形的闪烁问题(救急)
- Delphi如何做到监视一个WEB窗口的运行,并能截取WEB窗口发往网站的消息?在线等候...
- 谁知道金山毒霸2002的标准版的序列号,
- 用Report Machine打印设计时,有一台电脑报错误如下:'' is not a valid floating point value,大家有没有遇到过这种情况
- 请问如何在程序中连接sql7.0数据库时自动输入用户名和密码?
- 用ADO连接SQLServer,生成的exe文件是否可以脱离Delphi环境运行?
- 我做了一个ActiveXForm,但在网页刷新时有问题,请进来讨论一下
- 客户端 recv 接收到数据到,使样清空缓冲区的数据,等待下一个数据?
- 大家好, 关于查找字符串的问题! 现有非常非常多的字符,要查找并取出特定的字符串,请问该用何种方式才是最有效率的呢?
替换成
DSCNReceiver2.WriteBuffer(stream.Memory^,stream.Size) ;
myrec = package record
id:integer;
name:string[100];
......
ArrChar : array[0..6000] of char;
end;
procedure TActiveFormX.DSCNSender1DSTransmitters1SendBuffer(Sender: TObject;
Buffer: Pointer; Count, FrameID: Integer); var
m_myRec:myrec;
begin
....对m_myRec的赋值操作
DSCNReceiver2.WriteBuffer(m_myRec,sizeof(myrec)) ;
stream.Free;
end;
既然来晚了
就没什么好说的了
这样也行
WriteBuffer(pchar(buf)[0],Size) ;