![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
Вопрос: чему равно PageData + PageDataSize - Header ? -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Адрес + целое число = смещение адреса. Результат разницы между адресами это целое число равное количеству элементов расположенных между адресами одного массива. В данном случае 1 элемент равен 1му байту.
PS Хотя в новых делфях Char 2х байтовый, но мне кажется, что код старый и кроме того используется функция Move которая ожидает байты. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 14 Всего: 41 |
Раньше для работы с адресами использовал
сейчас все больше использую PChar - запись становится короче. Для совместимости с юникодными delphi необходимо объявлять как PAnsiChar -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
В новых версиях можно включить режим адресной арифметики {$POINTERMATH ON} и производить вычисления с указателями любого типа.
http://docs.embarcadero.com/products/rad_s...ermath_xml.html -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
а с PByte даже включать не нужно -------------------- Обижено школьников: 8 |
|||
|
||||
drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
Спасибо, очень полезно. не знал. Код старый еще с семерки. догадывался что это именно так. но XE3 жутко ругался на конструкцию (он на многое ругается) с типизированными указателями (PByte), пришлось привести к PChar. Вот и возник вопрос. На это как раз и ругается. TMyType = PByte. Так если переменные TMyType ругается на несовместимость Спасибо всем -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
тип PByte объявлен в режиме POINTERMATH ON поэтому адресная арифметика для него работает даже там где POINTERMATH OFF если ХЕ3 ругается это значит что или ты что-то напутал, или что в ХЕ3 совсем всё поломали. последний вариант мне кажется очень правдоподобным -------------------- Обижено школьников: 8 |
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 14 Всего: 41 |
В xe3 работает.
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Я думаю что дело как раз в том что
TMyType ведь не объявлен в режиме POINTERMATH ON -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 14 Всего: 41 |
Не работает сложение.
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
в ХЕ2 это ничего не меняет
какое именно? -------------------- Обижено школьников: 8 |
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 14 Всего: 41 |
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Бессмысленная арифметика и не работает. Работает указатель + число и указатель - указатель. На указатель + указатель работает защита от дурака.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
аа, ну это да. Так оно и с PChar не работает ![]() -------------------- Обижено школьников: 8 |
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
Вот интересно. А компиляторы Си такое сложение пропускают? Сейчас под руками нет ничего что-бы проверить. -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
в Си пропускают. думаю что указатели просто трактуются как бес знаковое целое. не знаю как там XE2, но при переносе проектов с XE и младше на XE3 еще не один гладко не прошел. Самое распространенное это NativeInt. На втором месте строки (ну тут понятно). Очень напрягает приведение типов Var параметров. Ассемблерные вставки это отдельная песня... (в x64 это недопустимо). Насколько понимаю тенденция в сторону ужесточения синтаксиса. -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
я с ХЕ на ХЕ2 перешел оч легко. строки были уже в порядке, потому что переход на уникод был раньше и отдельно
асм допустим, только в варианте полностью ассемблерных процедур а что с var-параметрами? Добавлено через 3 минуты и 32 секунды да не, в этом же нет никакого смысла. ну если вдруг какой и пропускает, то меня бы это сильно удивило -------------------- Обижено школьников: 8 |
|||
|
||||
Alexeis |
|
||||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Не пропускают компиляторы С++, потому что адресная арифметика в делфи стыбжена как раз из языка С . Если очень нужно могу накопать учебник какой или стандарт, но я сам проверял и компилятор ругался, причем ругался не ворнингом а ерором. Единственный вариант просуммировать указатели это привести один из указателей к целому числу. Вот выдержка из стандарта языка С99 о допустимых операндах в арифметических выражениях
Дальше идет уточнение по этим пунктам. Операция сложения указателей не определена стандартом. Это сообщение отредактировал(а) Alexeis - 27.3.2013, 20:09 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |