如何发送 Pointer ?

wealsh 2007-12-08 02:47:53
procedure Getdata(PBUF:Pointer;iLen:DWORD);stdcall;
begin
如何将 pbuf ilen 发送出去?
sendto(.....);
end;



接收以后作为以下函数的参数:
function Setdata(bBuf:Pbyte,dlen:Dword):Dword;
begin

end;
...全文
82 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
edongxu 2007-12-09
不知道你的发送是什么意思
用消息发送还是函数传递?
是dll传给调用者,还是调用者创给dll
回复
QSmile 2007-12-09
一意孤行 说得很明白了


TSendCommand = (scData, sc....); //定义一组发送命令枚举类型
TSendData = packed record
CMD : TSendCommand; //命令字
SendLen: DWORD; //长度
SendBuf: array[0..511] of byte; //发送内容
end;

只是数据太长时, SendBuf 不能定义成固定数组。不然有效数据太少了
回复
wealsh 2007-12-09
接收到数据后如何再将 SendBuf 转为指针?
回复
etomahawk 2007-12-09
var
m_Buf: array[0..511] of byte;
m_Data: TSendData;
begin
//填充数据
m_Data.Cmd:= '';
m_Data.SendBuf:= ..;
m_Data.SendLen:= ..;

ZeroMemory(m_Buf, 512); //清空缓冲
Move(m_Data, m_Buf, SizeOf(m_Data)); //将数据复制到缓冲区
...
end;

//建议不要用这种结构体:
TSendData = packed record
Cmd:string;
Sendbuf:PByte;
SendLen:DWORD;
end;

//建议的方式:
TSendCommand = (scData, sc....); //定义一组发送命令枚举类型
TSendData = packed record
CMD : TSendCommand; //命令字
SendLen: DWORD; //长度
SendBuf: array[0..511] of byte; //发送内容
end;
回复
ly_liuyang 2007-12-09
还是多看基础书吧~
回复
wealsh 2007-12-09
我该如何把指针数据转入到 结构体再发送呢?
回复
edongxu 2007-12-09
明白你的意思了
嗨,不知道说什么了,汗!
你是在网络上传数据,它必须是两台计算机之间的通信,传指针有什么用!!!

你要传数据到另一台计算机的话,必须建立一个自定义的通信格式
按自定义的格式发送,然后也按自定义的格式重组数据。。。。。

反正网络只能传递字节流,比如一个SendLen:DWORD; 的数据,你必须拆成四个字节,然后发送,接受后再把四个字节重组
回复
wealsh 2007-12-09
procedure Getdata(pbuf:Pointer;iLen:DWORD);stdcall; //dll里面的函数
begin
现在将:pbuf、ilen 发送出去
发送格式:
TSendData = packed record
Cmd:string;
Sendbuf:PByte;
SendLen:DWORD;
end;

UDP 发送 Sendto(...)

接收以后把 sendbuf、sendlen
传给别一个 dll 函数:

Setdata(bBuf:Pbyte,dlen:Dword)
回复
wealsh 2007-12-08
TSendData = packed record
Cmd:string;
Sendbuf:PByte;
SendLen:DWORD;
end;

需要用这样格式发送与接收该如何处理?
回复
相关推荐
发帖
网络通信/分布式开发
创建于2007-08-02

1573

社区成员

Delphi 网络通信/分布式开发
申请成为版主
帖子事件
创建了帖子
2007-12-08 02:47
社区公告
暂无公告