Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с массивом через указатели [D7, XP]


Страницы:   1 2

allucard ©   (2007-11-09 11:40:00) 

Вопрос:

Есть процедура:

procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
 Str: array [0..63] of byte;

begin
I := ComPort1.Read(str, Count);
read_trans(str, count);
end;


procedure read_trans(mem: pointer; count: integer);
begin
//Мне этой процедуре необходимо работать с массивом str
end;


1. Как передать процедуре указатель?
2. Как типизировать по указателю массив?

Спасибо.


Reindeer Moss Eater   (2007-11-09 12:33:00) [21]

Это если нравится гонять через стек большие объемы данных параметров


allucard   (2007-11-09 12:31:00) [22]

понял


Думкин   (2007-11-09 12:27:00) [23]

> allucard   (09.11.07 12:22) [6]

Надо кидать переменную с явно указанным типом.

procedure read_trans(mem: TMyArray; count: integer);


allucard   (2007-11-09 12:22:00) [24]

Да можно и не поинтерами, у меня просто массив в процедуру не кидался


Джо   (2007-11-09 11:49:00) [25]

> I := ComPort1.Read(@str[0], X);

X-1  :D


Джо   (2007-11-09 11:48:00) [26]

type
 TMyArray = array [0..X] of Char;

var
 Str: TMyArr;
...
I := ComPort1.Read(@str[0], X);

procedure read_trans(mem: pointer; count: integer);
var
 A: TMyArray;
begin
 A := TMyArray(Mem^);    
end;


Dib@zol   (2007-11-09 11:46:00) [27]

1. Что такое I?
2. Почему бы не передавать сам массив?

Ну раз уж тебе так нужно пойнтерами, то на:

type
 TMyArr = array [0..63] of byte;
 PMyArr = ^TMyArr;
...
var
 str : TMyArr;
...
I := ComPort1.Read(str, Count);
read_trans(@str, count);

procedure read_trans(arr:PMyArr; count: integer);
begin
 arr^[1]:=246;
 arr^[3]:=arr^[2];
 ...
end;


Reindeer Moss Eater   (2007-11-09 11:45:00) [28]

Точннее зачем тебе в первой процедуре массив фиксированной длины, если у тебя там есть длина данных?
GetMem, Read и передвай дальше свой пойнтер куда хочешь


Reindeer Moss Eater   (2007-11-09 11:44:00) [29]

1. Как передать процедуре указатель?

Вот так и передать как указатель.
Только зачем?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо