![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| maxkazar |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 26.1.2004 Где: Таганрог Репутация: нет Всего: нет |
--------------------------------------------------------------------------------
Страно! Встала задача копирования памяти из одного участка в другой. Логично конечно использовать процедуру Move. В хелпе описана так procedure Move(const Source; var Dest; Count: Integer); и экзампел понятный var A: array[1..4] of Char; B: Integer; begin Move(A, B, SizeOf(B)); { SizeOf = safety! } end; Да вот только в чем проблема. Надо работать не со статикой,а с динамикой. Ну логично предположить var A: pointer; B: pointer; begin GetMem(A,1000); GetMem(B,1000); Move(A, B, SizeOf(B)); { SizeOf = safety! } FreeMem(A,1000); FreeMem(B,1000); end; Если проследить за указателями, то процедура просто изменяет указатель B на указатель А. Как быть? |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Используй CopyMemory
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
В твоем случае будет так:
-------------------- С уважением, г-н Посол. |
|||
|
||||
| Unregistered |
|
|||
|
Unregistered |
procedure Move(const Source; var Dest; Count: Integer); |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
да никак. в общем случае - пойнтеры, т.е. четырёх байтовые указатели на некий адрес. их длина всегда равна 4, поэтому перлы типа SizeOf (P) - смысла не несут. конкретная специфика зависит от того, пойнтерами чего они являются. например, для класса - там идёт 2 байта собственно пойнтер, а ещё два байта - class reference. для того, чтобы с ними работать по-нормальному, их надо разыменовывать, т.е. P^. вот, собственно, и всё.
если интересуют детали - Help | Memory Manager. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |