Форум: "Сети";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
ВнизПередача структуры которая содержит поле типа pointer Найти похожие ветки
← →
denkop © (2004-10-03 00:01) [0]Имеется структура:
TCommBlock = record
Command,
SenderIP,
RecvIP:string[15];
SenderName:string[50];
Data:pointer;
DataSize:integer;
end;
Нужно записать в поле Data данные из строковой переменной передать их через TIdUPDClient/TIdUPDServer
Передаю так:procedure TMainForm.SendButtonClick(Sender: TObject);
var
UserName, UserIp, Mess:string;
CommBlock:TCommBlock;
Buf:pointer;
begin
UserName:="DEN";
UserIp:="127.0.0.1";
Mess:=MessEdit.Text;
CommBlock.Command:=Cmd[1];
CommBlock.SenderName:=NetName;
CommBlock.RecvIP:=UserIP;
CommBlock.DataSize:=Length(Mess);
GetMem(CommBlock.Data, CommBlock.DataSize);
try
Move(Mess[1], CommBlock.Data^, CommBlock.DataSize);
UDPClient.Host:=UserIp;
UDPClient.SendBuffer(CommBlock, SizeOf (CommBlock));
finally
FreeMem(CommBlock.Data);
end;
end;
А принимаю так:procedure TMainForm.UDPServerUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
CommBlock: TCommBlock;
FileName, Str:string;
StreamBuf:TMemoryStream;
Buf:pointer;
i:integer;
begin
StreamBuf:=TMemoryStream.Create;
GetMem(Buf,AData.Size);
try
StreamBuf.CopyFrom(AData, AData.Size);
StreamBuf.Seek(0,soFromBeginning);
StreamBuf.Read(CommBlock, AData.Size);
finally
StreamBuf.Free;
FreeMem(Buf);
end;
Str:="";
SetLength(Str,CommBlock.DataSize);
Move(CommBlock.Data^, Str[1], CommBlock.DataSize);
ShowMessage(Str);
end;
Но в итоге получаю то, что совсем не ожидал получить. Остальные поля записи приходят нормально, а поинтер коверкается...
Подскажите пожалста, что я делаю не так.
← →
VMcL © (2004-10-03 00:28) [1]>Подскажите пожалста, что я делаю не так.
Пытаешься считать область памяти с другого компьютера, имея указатель на область памяти текущего компьютера.
← →
GuAV © (2004-10-03 00:43) [2]
> Передача структуры которая содержит поле типа pointer
> через TIdUPDClient/TIdUPDServer
LOL :-)
← →
GuAV © (2004-10-03 00:45) [3]хотя если в пределах одной машины и одного процесса то почему бы и нет :-)
← →
denkop © (2004-10-03 00:46) [4]Мда, верно... а как быть в таком случае. Как передать данные переменной длины, в структуре??
← →
denkop © (2004-10-03 00:46) [5]Это всё будет происходить не обзательно в пределах одной машины
← →
denkop © (2004-10-03 01:47) [6]разобрался
data:array [1..1024] of char
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c