Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Есть описание структуры VCL-классов x64? / 25 сообщений из 27, страница 1 из 2
18.12.2020, 16:48
    #40029116
qlost
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
Коллеги, где можно найти инфо о структуре классов в памяти в время работы x64 приложения, скомпиленного на Delphi?
Поясню, что хочу сделать:
Есть приложение PLSQL Developer x64, писанное на Дельфе с её vcl-компонентами. Нужно получить доступ к этим компонентам (например TcxCheckBox, TSyntaxMemo) и вызывать их методы/изменять свойства (напр, Checked) из dll-плагина.
Удалось нарыть, что Дельфя привязывает к HWND визуальных компонент свойства (SetProp()) с именами ControlOfsXXXXXX..., которые содержат указатель на некую структуру, идентифицирующую объект класса.
Но вот дальше - затык.
Если есть спецы или где-то видели инфу - ответтье, пожалуйста.
...
Рейтинг: 0 / 0
18.12.2020, 17:07
    #40029119
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
qlost,

Тебе проще через сообщения винды это делать, чем ковырять объекты. Потому что с невиртуальными методами ты как в том анекдоте: "а хотите всерьёз, по-настоящему?!"...
...
Рейтинг: 0 / 0
18.12.2020, 17:13
    #40029121
qlost
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
alekcvp,

Неа, как ни странно, TcxCheckBox не хочет меняться с помощью Button_GetCheck/Button_SetCheck или WM_LBUTTONDOWN+WM_LBUTTONUP
работает только
Код: plaintext
1.
2.
3.
    SendMessage(h, WM_ACTIVATE, WA_CLICKACTIVE, 0);//активация контрола
    PostMessage(h, WM_KEYDOWN, ' ', 0);//нажать пробел
    PostMessage(h, WM_KEYUP, ' ', 0);//отжать пробел


но, это переключение, а как получить текущее состояние - ?
к тому же, с TSyntaxMemo всё уже совсем не так просто.
...
Рейтинг: 0 / 0
18.12.2020, 17:52
    #40029125
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
alekcvp
qlost,

Тебе проще через сообщения винды это делать, чем ковырять объекты. Потому что с невиртуальными методами ты как в том анекдоте: "а хотите всерьёз, по-настоящему?!"...

Сейчас, в эпоху самописывания контролов с нуля, на совместимость с winapi сообщениями все чаще кладут болт
...
Рейтинг: 0 / 0
18.12.2020, 19:31
    #40029143
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
Fr0sT-Brutal
Сейчас, в эпоху самописывания контролов с нуля, на совместимость с winapi сообщениями все чаще кладут болт
Большой минус как по мне.
...
Рейтинг: 0 / 0
18.12.2020, 20:02
    #40029149
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
alekcvp
Большой минус как по мне.
Нафик-нафик. Почитай Чена или посмотри сырцы винды, на предмет сколько там говна из-за легаси скопилось. Если в каждом контроле пытаться эмулировать точную реакцию на виндовые мессаги -это надо отдельную группу разработчиков-мазохистов надо нанимать и платить большие деньги
...
Рейтинг: 0 / 0
18.12.2020, 20:09
    #40029150
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
white_nigger
alekcvp
Большой минус как по мне.
Нафик-нафик. Почитай Чена или посмотри сырцы винды, на предмет сколько там говна из-за легаси скопилось. Если в каждом контроле пытаться эмулировать точную реакцию на виндовые мессаги -это надо отдельную группу разработчиков-мазохистов надо нанимать и платить большие деньги

Зачем точную, вы же не создавать их через WinApi будете. А вот обмен информацией, типа BM_GETCHECK, WM_SETTEXT - почему нет? И не особо сложно, как по мне.
...
Рейтинг: 0 / 0
18.12.2020, 20:20
    #40029151
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
alekcvp
Зачем точную, вы же не создавать их через WinApi будете. А вот обмен информацией, типа BM_GETCHECK, WM_SETTEXT - почему нет? И не особо сложно, как по мне.
А нафига? Цель кустомных контролов - дать то чего нет и с удобным API. Если человек вместо этого начинает городить мессаги - это повод задуматься об изъянах в API, а не пытаться натянуть сову на глобус. К тоже же профессионалов в WinAPI не так много, иногда пользователи такое учудят. Плюс никто не отменял, что часто люди не знают контролов с которыми работают - хотя бы на уровне чтения хелпа. Вот и изобретают велосипеды.
...
Рейтинг: 0 / 0
18.12.2020, 21:40
    #40029167
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
Как мне кажется - мы не в ту сторону смотрим. Имеется какое приложение. В него хотят внедрится посредством посылки отсылки WinAPI сообщений и прочего мазохизма. Вопрос - зачем? Может исходное приложение имеет какие-то средства для плагинописателей ала Фар тот же (как пример) ?
...
Рейтинг: 0 / 0
18.12.2020, 22:44
    #40029175
qlost
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
Если бы средства имелись, я бы тут не спрашивал.
По существу вопроса ответы будут?
...
Рейтинг: 0 / 0
18.12.2020, 23:13
    #40029179
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
qlost
По существу вопроса ответы будут?

А чего там по существу, открываешь исходники класса и смотришь. Только тебе надо будет точно знать версию компонента, с которой собрано приложение, ведь малейшее изменение в полях - и все свойства ползут.
...
Рейтинг: 0 / 0
18.12.2020, 23:28
    #40029183
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
...
Рейтинг: 0 / 0
19.12.2020, 00:46
    #40029195
qlost
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
Fr0sT-Brutal
qlost
По существу вопроса ответы будут?

А чего там по существу, открываешь исходники класса и смотришь. Только тебе надо будет точно знать версию компонента, с которой собрано приложение, ведь малейшее изменение в полях - и все свойства ползут.

Я хочу найти инфу, как менеджер объектов (хз как назвать) раскладывает объект в оперативной памяти. Где экземпляр объекта относительно hwnd, где таблица методов и т.п.
Нагуглить удалось что-то типа того, но для x86. На x64 как-то не укладывается.
...
Рейтинг: 0 / 0
19.12.2020, 00:47
    #40029196
qlost
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?

не оно. Софтину я указал в первом сообщении.
...
Рейтинг: 0 / 0
19.12.2020, 15:23
    #40029257
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
qlost
Я хочу найти инфу, как менеджер объектов (хз как назвать) раскладывает объект в оперативной памяти. Где экземпляр объекта относительно hwnd, где таблица методов и т.п.
А вот и натягивание совы...
...
Рейтинг: 0 / 0
19.12.2020, 15:33
    #40029259
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
qlost
Если бы средства имелись, я бы тут не спрашивал.
По существу вопроса ответы будут?


PL/SQL Developer как раз имеет поддержку сторонних плагинов, и это даже всё официально
...
Рейтинг: 0 / 0
19.12.2020, 19:14
    #40029303
qlost
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
defecator
qlost
Если бы средства имелись, я бы тут не спрашивал.
По существу вопроса ответы будут?


PL/SQL Developer как раз имеет поддержку сторонних плагинов, и это даже всё официально

Да ё моё ребята, по теме ответы прошу! Или вы тут все asm и двоичные коды в глаза не видывали?
Есть поддержка, да, но нет того, что я хочу. Разрабы выполняют фич-реквесты десятилетиями или не выполняют вообще. А доступ к объектам vcl развязал бы руки.
...
Рейтинг: 0 / 0
19.12.2020, 19:52
    #40029312
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
qlostДа ё моё ребята, по теме ответы прошу
Ответ простой. Вы не можете получить доступ к компонентам в dll.
Да и мало верится чтобы "что Дельфя привязывает к HWND визуальных компонент свойства (SetProp())".
Компонент за свою жизнь может и не получить HWND, но доступ к свойствам всё равно есть.
...
Рейтинг: 0 / 0
19.12.2020, 20:49
    #40029319
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
DimaBr
Да и мало верится чтобы "что Дельфя привязывает к HWND визуальных компонент свойства (SetProp())".
Компонент за свою жизнь может и не получить HWND, но доступ к свойствам всё равно есть.

Он этот SetProp() использует чтобы ссылку на Self прикрепить (для оконной процедуры).
Проблема в том, что через Self можно достать только до VMT, где хранятся адреса виртуальных методов, а вот до статических таким образом не добраться. И я вообще слабо представляю, каким образом можно добраться до статических методов объекта без RTTI. А методы вроде SetChecked/GetChecked скорее всего ещё и приватные, т.е. даже RTTI для них нет.
...
Рейтинг: 0 / 0
20.12.2020, 23:56
    #40029575
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
alekcvp
Проблема в том, что через Self можно достать только до VMT, где хранятся адреса виртуальных методов, а вот до статических таким образом не добраться. И я вообще слабо представляю, каким образом можно добраться до статических методов объекта без RTTI. А методы вроде SetChecked/GetChecked скорее всего ещё и приватные, т.е. даже RTTI для них нет.

Да можно просто приведением к типу. Но версия VCL и либы должна совпадать хотя бы на уровне полей компонента.

ТС: открываешь код компонента - именно так объект и располагается в памяти. Сначала предки вплоть до TObject, потом свои поля.
...
Рейтинг: 0 / 0
21.12.2020, 10:22
    #40029635
qlost
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
Исходников компонент в открытом доступе не нашёл. Да это и не самое важное. Найти бы ниточку от HWND к этому объекту в памяти.
А HWND точно есть - EnumChildWindows() его перечисляет.
...
Рейтинг: 0 / 0
21.12.2020, 10:51
    #40029649
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
qlost
Найти бы ниточку от HWND к этому объекту в памяти.

Посмотри как реализован FindControl(...), обрати внимание на ObjectFromHWnd.
...
Рейтинг: 0 / 0
21.12.2020, 13:58
    #40029733
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
...
Рейтинг: 0 / 0
21.12.2020, 14:01
    #40029736
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
qlost
Найти бы ниточку от HWND к этому объекту в памяти.
А HWND точно есть - EnumChildWindows() его перечисляет.


Я бы попробовал находить InitInstance после загрузки программы (возможно, просто поиском в памяти, возможно как-то оптимальнее) и перехватывал - так получится карта объектов с их классами. Скорее всего, объекты имеющие HWND будут потомками TWinControl (или какого-то иного базового класса, реализующего работу с окном). Эти потомки будут иметь HWND по некоторому одинаковому смещению.
Не знаю, насколько это применимо к 64-битной версии, но проверяется легко.
...
Рейтинг: 0 / 0
21.12.2020, 15:18
    #40029763
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть описание структуры VCL-классов x64?
x1ca4064
Не знаю, насколько это применимо к 64-битной версии, но проверяется легко.

Что ему это даст, если у него нет исходников?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Есть описание структуры VCL-классов x64? / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]