Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1253610696
Вася
2009-09-22 13:11
2009.11.22
Распаковать gz


2-1255318681
dort12
2009-10-12 07:38
2009.11.22
динамический создавать форму


15-1253971366
Джони
2009-09-26 17:22
2009.11.22
DAC for MySQL 2.7.2 Free Trial (Объясните пжл)


8-1200150296
antonn
2008-01-12 18:04
2009.11.22
Быстрое копирование битмапов


2-1253626479
Fr
2009-09-22 17:34
2009.11.22
Перебор форм





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский