1,593
社区成员
发帖
与我相关
我的任务
分享
//数据定义
type
DataPack = record
DataPackFlag: LongInt;
DataPackCurrLength: LongInt;
DataPackInfo: array[1..1000] of Char;
end;
//注意此处的定义,实现的var 引用。。。。。。。。。。。。。。。
function SendPacket(ServerSock: Tsocket; var pBuffer: PChar; iDatalength: Integer): Integer; stdcall;
var
tmp_iSendBytes: Integer;
tmp_iTotalBytes: Integer;
Buf:DataPack;
begin
tmp_iSendBytes := 0;
tmp_iTotalBytes := 0;
//Move(pbuffer^,Buf,iDatalength); //此处如果不写成pBuffer^拷贝到的内容竟然还是指针偏移了四个字节。。特别郁闷 ???????? 测试使用
if ServerSock = SOCKET_ERROR then //高人指点迷津啊??????????????、、
begin
CommonSendPacket := 0;
Exit;
end
else
begin
while (tmp_iSendBytes < iDatalength) do
begin
//调试发现为什么,使用了引用。但是传递过来的pBuffer指针指向的不是首地址呢、
//发现地址提前了四个字节即就是pBuffer+4=下面的@m_DataPackSend地址 ????
tmp_iSendBytes := send(ServerSock, pBuffer, iDatalength - tmp_iTotalBytes, 0);
if tmp_iSendBytes > 0 then
begin
pBuffer := pBuffer + tmp_iTotalBytes;
tmp_iTotalBytes := tmp_iTotalBytes + tmp_iSendBytes;
end
else
begin
SendPacket := tmp_iTotalBytes;
Exit;
end
end;
SendPacket:= tmp_iTotalBytes;
end
end;
var
m_DataPackSend:DataPack;
m_pDataBuffer:PChar;
//********** 调用发送函数
FillDataPack;//填充数据包结构
m_pDataBuffer:=@m_DataPackSend;//取其存储地址
tmp_iBytesCounts:=SendPacket(m_hServerSocket,m_pDataBuffer,m_DataPackSend.DataPackCurrLength);
begin
//调试发现为什么,使用了引用。但是传递过来的pBuffer指针指向的不是首地址呢、
//发现地址提前了四个字节即就是pBuffer+4=下面的@m_DataPackSend地址 ????
tmp_iSendBytes := send(ServerSock, pBuffer, iDatalength - tmp_iTotalBytes, 0);
//改为 send(ServerSock, pBuffer^, iDatalength - tmp_iTotalBytes, 0);
function SendPacket(ServerSock: Tsocket; var pBuffer: PChar; iDatalength: Integer): Integer; stdcall;//去掉var