Вниз
Скачать: CL | DM;

Можно ли изменять таблицу DMT для класса в runtime?   Найти похожие ветки 

← →
kshin   (2006-02-15 16:21) [0]

Имеется ввиду возможна ли подмена адреса динамического метода в DMT на адрес своей функции.
У меня сложилось впечатление что регион памяти доступен только для чтения, в который компилятор заносит эти таблицы.


← →
Digitman ©   (2006-02-15 16:26) [1]


> У меня сложилось впечатление что регион памяти доступен
> только для чтения


И не только он самый. Да и не "регион" это ..
Мало ли что еще доступно "только для чтения" ..


← →
Игорь Шевченко ©   (2006-02-15 16:37) [2]


> У меня сложилось впечатление что регион памяти доступен
> только для чтения, в который компилятор заносит эти таблицы.
>


Впечатление правильное. DMT находится в сегменте кода, защищенном от записи. Защиту можно поменять, безусловно, непонятно только, какой смысл в таких действиях


← →
evvcom ©   (2006-02-16 10:00) [3]

"Правильнее" написать потомка и перекрыть в нем ЭТОТ динамический метод.


← →
kshin   (2006-02-16 10:43) [4]

>Защиту можно поменять, безусловно, непонятно только, какой смысл в таких действиях

Смысл в том что так можно попробовать перехватить все сообщения одоного типа (читай номера), для определенных классов или объектов, не изменяя их код. А если можно поменять защиту, то интересно как?

> "Правильнее" написать потомка и перекрыть в нем ЭТОТ динамический метод.

Это я и так понимаю, но если я не хочу писать наследников всех компонентов для внесения некоторого общего изменения их поведения.

Конкретно - хотел сделать, что бы при работе приложения реакция на Enter, была аналогична реакции на Tab. (Ну и еще кое что)


← →
Плохиш ©   (2006-02-16 11:00) [5]


> что бы при работе приложения реакция на Enter, была аналогична
> реакции на Tab.

Для этого существует OnKeyDown/Press


← →
evvcom ©   (2006-02-16 11:10) [6]


> А если можно поменять защиту, то интересно как?

VirtualProtect


← →
kshin   (2006-02-16 11:16) [7]

Плохишу: OnKeyDown/Press - для каждой формы надо писать (копировать) каждый раз, когда создаеш новую форму.
И я не вижу ничего хорошего в том, что  модуль формы с модифицированным поведением сразу содержит массу написанных обработчиков еще без содержания логики касающейся именно этой формы


← →
kshin   (2006-02-16 11:18) [8]

За ответы всем огромное спасибо.


← →
Плохиш ©   (2006-02-16 11:29) [9]


> Плохишу: OnKeyDown/Press - для каждой формы надо писать
> (копировать) каждый раз, когда создаеш новую форму.
> И я не вижу ничего хорошего в том, что  модуль формы с модифицированным
> поведением сразу содержит массу написанных обработчиков
> еще без содержания логики касающейся именно этой формы

1. Форма - это тоже класс, к которому применимо понятие наследование
2. Реакции на нажатие кнопок вообще-то тоже относятся к "логике функционирования формы"
3. Может стоит занятся написанием новой оси для своей программы?


← →
Игорь Шевченко ©   (2006-02-16 11:45) [10]


> Конкретно - хотел сделать, что бы при работе приложения
> реакция на Enter, была аналогична реакции на Tab


В данном случае лучше использовать хук WH_GETMESSAGE


← →
Leonid Troyanovsky ©   (2006-02-16 12:05) [11]


> kshin   (16.02.06 11:16) [7]

> Плохишу: OnKeyDown/Press - для каждой формы надо писать
> (копировать) каждый раз, когда создаеш новую форму.


http://rsdn.ru/Forum/?mid=671506

--
Regards, LVT.


← →
Игорь Шевченко ©   (2006-02-16 12:29) [12]

Leonid Troyanovsky ©   (16.02.06 12:05) [11]

Так это тоже надо для каждой формы писать :))


← →
kshin   (2006-02-16 12:56) [13]

Leonid Troyanovsky ©   (16.02.06 12:05) [11]

До этого я и сам дошел. И именно обработчик cm_DialogKey для TCustomForm хотелось заменить на примерно такой - же, но в таблице динамических методов.

Может не понятно, но при этом можно не играть в наследование форм, а создавать обычную форму, каждый раз когда это надо при разработке приложения и всего раз включить один модуль, который  выполняет подмену клавиши для ВСЕХ форм.

Но раз память под ТДМ read-only, то и дальнейшие рассуждения бессмысленны - следующее по простоте Репозитарий + наследование при добавлении из него.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.04 c
4-1135613573
oleggar
2005-12-26 19:12
2006.03.19
кто изменил файл ?


4-1135913329
mss
2005-12-30 06:28
2006.03.19
Определить сколько сетевое карта


8-1128691651
sco
2005-10-07 17:27
2006.03.19
Ico


5-1127279900
OlegM
2005-09-21 09:18
2006.03.19
Перебор компонетнов на форме и установка свойств для них


2-1141306136
Layner
2006-03-02 16:28
2006.03.19
Как выбрать записи из таблицы без обращения к серверу?




   Наверх