Форум: "Начинающим";
Текущий архив: 2009.11.22;
Скачать: [xml.tar.bz2];
ВнизКак правильно использовать указатели в данной задаче Найти похожие ветки
← →
bodun (2009-10-04 17:48) [0]Я с указателями почти не работал, собственно не совсем понимаю нужны ли они в моем случае:
На сервер отправляется пакет данных состоящий из обязательного заголовка и блока с данными. Заголовок представляет собой запись из нескольких полей, данные же создаются иной функцией и должны быть прибавлены к заголовку. А все это должно уже быть отправлено.
Т.е. должны быть 3 функции:
function CreatePacket(msg:DWORD; data:какой-то тип):какой-то тип;
function CreateData(параметры:String/integer):какой-то тип;
function SendPacket(какой-то тип):boolean;
Вопросы:
1) Как выделить память под данные в функции CreatePacket, вставить в него заголовок и прибавить Data;
2) Какой тип должны принимать функции? И вообще уместно ли делать вывод данных в Result?
← →
Sapersky (2009-10-04 19:13) [1]Можно сделать на "чистых" указателях (GetMem/ReallocMem/Move/FreeMem), можно для большего удобства использовать разного рода "обёртки" - TMemoryStream, дин. массив (array of Byte) или даже строку (рекомендуется AnsiString для совместимости со старшими версиями).
Со строкой, правда, я не вполне уверен, правильно ли будут обрабатываться 0-и в середине, но по идее, если не использовать ф-ии для работы с PChar, должны правильно. Во всяком случае, видел работающий проект, который использовал для формирования буферов данных строки.
← →
bodun (2009-10-04 20:00) [2]А где можно посмотреть пример работы с указателями?
Я пытаюсь скопировать с помошью move данные из record в Массив, ниче не получается((
← →
Kolan © (2009-10-04 20:20) [3]Я бы советовал использовать простой динамический массив байт. Ошибок меньше будет.
← →
Sapersky (2009-10-04 21:39) [4]Ещё, если макс. размер данных известен и сравнительно невелик, то можно использовать статический массив.
А где можно посмотреть пример работы с указателями?
В справке стандартной должны быть, по теме Pointers and pointer types. В книжках по Delphi тож...
Я пытаюсь скопировать с помошью move данные из record в Массив, ниче не получается
procedure TForm1.Button1Click(Sender: TObject);
type
PMyRec = ^TMyRec;
TMyRec = record
a, b, c : Integer;
end;
TByteArr = array of Byte;
Const
MRSize = SizeOf(TMyRec);
Var
rec : TMyRec;
arr : TByteArr;
begin
SetLength(arr, MRSize);
Move(rec, arr[0], MRSize); // можно так...
PMyRec(@arr[0])^ := rec; // ...или так
end;
← →
qwer_qwer (2009-10-04 22:05) [5]
> TMyRec = record a, b, c : Integer;TMyRec = packed record a, b, c : Integer;
← →
bodun (2009-10-04 22:34) [6]Все удалось, но - байты не в том порядке. Т.е если было число $11223344 то в массиве будет $44332211, а нужно наоборот не в сетевом формате.
← →
bodun (2009-10-04 22:52) [7]хотя эту проблему решил
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.11.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c