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-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)


Страницы:   1 2

Наверх

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