Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
ВнизПреобразовать PChar Найти похожие ветки
← →
Роман (2004-03-12 11:04) [0]Всем привет!
Возникла следующая проблема:
Использую компонент TIPX для передачи двоичных данных по сети, для получения
данных используется событие:
procedure Tmf.IPX1ReceiveData(Sender: TObject; Buffer: PAnsiChar;
BufferLength: Integer; SockAddr: TSockAddrIPX; SockAddrLen: Integer);
type buffType =array [1..165000] of char;
var
s : string;
buff : ^buffType;
ad : pointer;
begin
ad:=Buffer;
buff:=ad;
s:=copy(buff^, 5, BufferLength-4);
...
Насколько корректно я написал, дело в том, что отработав несколько раз
приложение падает с AV.
Рекомендованное Helpoм s:=string(Buffer) не проходит, т.к. копируются не все
данные (до #0).
Помогите люди добрые, кто чем может!
← →
evvcom (2004-03-12 11:09) [1]А нафига двоичные данные копировать в строку? Используй Move-копирование в обычный двоичный буфер.
← →
PVOzerski © (2004-03-12 11:17) [2]>s:=copy(buff^, 5, BufferLength-4);
Только догадка: нет ли здесь неявного преобразования массива в строку? Я бы предпочел связку SetLength и Move. Если, конечно, я правильно понял задачу.
procedure Tmf.IPX1ReceiveData(Sender: TObject; Buffer: PAnsiChar;
BufferLength: Integer; SockAddr: TSockAddrIPX; SockAddrLen: Integer);
var
s : string;
l:cardinal;
begin
if BufferLength<5 then
s:=""
else
begin
l:=BufferLength-4;
SetLength(s,l);
move(Buffer[4],s[1],l);
...
← →
Роман (2004-03-12 12:19) [3]Господа, благодарю! Оператор "move" помог, проблема решена!
Хоть и писал ещё на TP, аднако "move" не использовал никогда, удобно однако.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.025 c