![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с массивом [D7, XP]
allucard © (2007-11-08 13:55:00)Есть динамический массив.
К этому массиву нужно добавить 1 байт в начале и два байта в конце.
Как это проще всего сделать?
Как к нему через pointer или memorystream обращаться?
Anatoly Podgoretsky (2007-11-09 10:47:00) [1]> ЮЮ (09.11.2007 10:09:23) [23]
Броне трусы нужны
ЮЮ (2007-11-09 10:09:00) [2]>
> Повернись
Можно подумать что, когда двое спереди, а один сзади намного лучше, чем сабжевое 1 спереди и 2 сзади. Ноги клеить надо в обоих случаях :)
Anatoly Podgoretsky (2007-11-09 09:59:00) [3]> Slym (09.11.2007 09:34:21) [21]
Повернись
Slym (2007-11-09 09:34:00) [4]Slym © (09.11.07 9:33) [20]
1 спереди и 2 сзади
не нравится мне это :)
Slym (2007-11-09 09:33:00) [5]если заранее известно что будет 1 спереди и 2 сзади... проще их зарезервировать и не использовать, а потом делать все что угодно без фсяких распределения памяти и поинтеров
Anatoly Podgoretsky (2007-11-08 15:37:00) [6]Не трогай указатели, пока не поймешь их. В задаче нет нужды в указателях.
Anatoly Podgoretsky (2007-11-08 15:34:00) [7]
> массив char (можно и byte)
Если Char, то причем тут Byte
Сергей М. (2007-11-08 15:20:00) [8]
> allucard (08.11.07 15:03) [16]
Ну и нафих он нужен ?
allucard (2007-11-08 15:03:00) [9]
> Сергей М. © (08.11.07 14:40) [12]
mem: pointer
Dib@zol (2007-11-08 14:49:00) [10]плин.
function write_mary_trans (mem: pointer; count: DWORD):Byte;
asm
MOV AL, BYTE PTR [EAX+EDX];
end;
Ах да забыл сказать: count в данном случае обозначает элемент массива, к-рый нужно возвратить.
Dib@zol (2007-11-08 14:48:00) [11]Впрочем, можно и проще.
function write_mary_trans (mem: pointer; count: DWORD):Byte;
asm
MOV AL, BYTE PTR [EBX+EDX];
end;
Dib@zol (2007-11-08 14:46:00) [12]> могу я к нему обратиться как к массиву байт.
Можешь.
function write_mary_trans (mem: pointer; count: DWORD):Byte;
asm
PUSH EBX;
MOV EBX, EAX;
XOR EAX, EAX;
MOV AL, BYTE PTR [EBX+EDX];
POP EBX;
end;
Сергей М. (2007-11-08 14:40:00) [13]какой нафих еще mem ?
Где объявление этого идентификатора ?
Palladin (2007-11-08 14:39:00) [14]так он у тебя итак массив байт чего ты хочешь?
allucard (2007-11-08 14:37:00) [15]Я обьявил и заполнил динамический массив.
могу я к нему обратиться как к массиву байт.
делаю так:
procedure TForm1.Button8Click(Sender: TObject);
var g: integer;
data: array of byte;
begin
setlength(data, 6);
data[0] := 11;
data[1] := 12;
mem:=data;
write_mary_trans(mem, 6, g);
end;
procedure write_mary_trans (mem: pointer; count: integer; var k: integer);
begin
k := (PByteArray(mem)[1]); // Access violation
end;
Dib@zol (2007-11-08 14:12:00) [16]Введи тип массива. Скажем, такой:
TMyMegaArr = array of Byte;
...
procedure ArrayProc(a:TMyMegaArr);
begin
end;
И передавай скока угодно... :)
Сергей М. (2007-11-08 14:12:00) [17]
> его нужно передать в процедуру, а с массивом не получается
В процедуру можно передать все что угодно - хоть массив, хоть розовых слоников.
allucard (2007-11-08 14:10:00) [18]
> Palladin
да, забыл сказать что его нужно передать в процедуру, а с массивом не получается
Palladin (2007-11-08 14:09:00) [19]move(a[0],a[1],length(a)-3)
Palladin (2007-11-08 14:08:00) [20]setlength(a,length(a)+3)
move(a[1],a[2],length(a)-3)