![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с массивом через указатели [D7, XP]
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. Как передать процедуре указатель?
Вот так и передать как указатель.
Только зачем?