![]() |
|
|
![]()
|
|
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
Как узнать хендл модуля по компоненту?
То есть, мне нужно узнать, в каком модуле был создан объект, через один из главных интерфесов, которые наследуют все компоненты Бильдера TComponent, TWinControl, TObject ? |
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
Ну или как узнать хендл модуля, по хендлу объекта?, Мне важно знать в какой ДЛЛ был создан объект, чтобы в последствии обратиться к этой самой длл, и взять нужную функцию.
|
|||
|
||||
| Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
Немного не понял. Объект находится в программе или в DLL?
-------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
HappyLife,
Объект где-то создается, и отображаеться в программе. Вот мне важно знать где он создан. Насколько я знаю, все объекты храняться в Application->Components Вот перебором, по всем объектам, мне важно знать, кто их создал. Создаются они в одних из моих ДЛЛ. Это сообщение отредактировал(а) HappyLife - 16.4.2007, 13:32 |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 32 Всего: 158 |
HappyLife, если я правильно понял вопрос, то без "своего" учета - никак.
|
|||
|
||||
| Vyacheslav |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Вообще можно.
Вот из моего проекта. Определял по адресу имя модуля(своего!!!), откуда пришел exception
Добавлено через 5 минут и 7 секунд И вот код окна, которое выдавало информацию по ошибке
Добавлено через 8 минут и 46 секунд Хотя, судя по всему, это немного не то :( Присоединённый файл ( Кол-во скачиваний: 18 )
except.jpg 23,39 Kb-------------------- С уважением, Вячеслав Ермолаев |
||||
|
|||||
| Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
Похоже, что если объект находится на собствееной форме, то отследить кто его создал не удастся :( Наверное, самый эфективный и простой метод это собственное слижение (т.е передача нужной информации об источнике с объектом). Хотя тоже накручено получается.
p.s. Vyacheslav, этот код определяет только адрес по имени? -------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Это код определяет имя по адресу -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
Vyacheslav, Кхм, может быть это как раз то что мне нужно...
Но вот есть маленькая незадача. Если в качетсве параметра
например передать ClassName() он возратит, где этот самый метод находиться. А мне важно узнать, как определить где он создан.... Вот чтобы передать туда:((( Или преобразовать может быть как-нибудь... |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
А адрес компонента не пробовал передавать?
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
Бред какой-то иерогливовский получается.
|
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 32 Всего: 158 |
вполне логично - GetModuleFileName возвращает ошибку. таким способом можно пользоваться только для кода или глоб.данных. память же под компоненты итд выделяется менеджером, и AllocationBase этой памяти не является правильным хэндлом для GetModuleFileName. если доступны исходники всех библиотек, в которых создаются компоненты, то нужно каким-либо образом(напр. перегрузить new) приписывать хэндл модуля к выделяемому блоку памяти, либо заводить свой список (Object, hInstance). если исходников нет, то можно глобально переназначить процедуры выделения памяти(F1:TMemoryManager), а там разгребать call-stack на предмет адресов с AllocationBase равным одному из hInstance dll'ей. найденный приписывать в начало блока. а стоит овчинка выделки-то? |
|||
|
||||
| Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
Странно, у меня без ошибки, только выдает название моего проекта (Project1.exe) :( -------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
dumb, суть в том, что я занимаюсь MultiLanguage для своего проекта.
И уж изначально, пошло, что для программы языки хранятся в одной папачке, а для модуля вместе с модулем. Вот и важно определить, где хранится файлик с текстом, для данной ДЛЛ. Есть мысль поперепрошить в каждый ДЛЛ отдельный мультиязычный компонент, но это крайний случай. Хотелось бы чтобы все можно было сделать из главного exe, или наоборот всю мультиязычность сделать в отдельной ДЛЛ. Это сообщение отредактировал(а) HappyLife - 18.4.2007, 09:23 |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 32 Всего: 158 |
эээ...
то же самое можно сделать и внутри каждой из библиотек, и экспортнуть функцию типа GetLangFile... |
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 4 Всего: 8 |
dumb, Согласен.
Хотелось, бы у самого компонента спросить, "где твой файлик с переводом". Всем спасибо за помощь. Будем стараться. будем решать. |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |