![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| stab |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
Есть некоторая процедура, которой передается параметр типа TMethod. Не могу найти удобный способ преобразования любого метода в TMethod. Если просто написать MyProc(TMethod(SomeMethod)); компилер это не проглатывает. Приходится объявлять переменную процедурного типа ей присваивать SomeMethod, а уже потом писать MyProc(TMethod(SomeMethodVariable)); , т.е.:
а хотелось бы так:
-------------------- 6, 6, 6 - the number of the beast. |
||||
|
|||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
сомневаюсь... метод - это запись. которая может быть и процедурой, и функцией. как ты хочешь привести запись - к процедуре?
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Вот так может?
Это сообщение отредактировал(а) <Spawn> - 27.4.2004, 12:39 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
<Spawn>, а если параметров больше? или нет вообще? а если методом является функция, возвращающая значение? это будет работать?
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Передача в функцию метода будет работать, так как это всего лишь указатели(TMethod.Code и TMethod.Data)
Это сообщение отредактировал(а) <Spawn> - 27.4.2004, 13:47 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
но ведь MetodAddres работает не для всех методов? только для published? или я путаю?
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| stab |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
Здесь же без проблем в переменную SomeMethodVariable заносится информация о методе, а все переменные такого рода ни что иное, как переменные типа TMethod. Надо просто как-то обмануть компилер, что бы он опустил проверку сигнатуры методов. з.ы. жаль, что MethodAddress действительно не для всего работает -------------------- 6, 6, 6 - the number of the beast. |
||||
|
|||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Можно так, правда нужно знать класс объекта (в большинстве случаев я думаю это не проблема):
-------------------- С уважением, г-н Посол. |
|||
|
||||
| Gwire |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 216 Регистрация: 7.8.2007 Где: Николаев Репутация: 1 Всего: 4 |
Если нужно получить указатель на метод объекта, не задумываясь какого он типа этот метод.
То есть
Или проще
Это сообщение отредактировал(а) Gwire - 22.8.2013, 14:24 |
||||||
|
|||||||
| Gwire |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 216 Регистрация: 7.8.2007 Где: Николаев Репутация: 1 Всего: 4 |
Прошу прощения.
Похоже с 2004 года это никому не интересно. В 2013 ни кто не задается вопросом как получить указатель на метод. Ведь все давно под .Net кодят. Один я тут такой застарелый решил поделится отстойной информацией. |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Нет, все в порядке. Да, где-то ты не прав в плане оживления старой темы, но в остальном молодец. Поисковики это проиндексируют и, возможно, кому-то твой код очень поможет. Не все еще на .Net сидят.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
![]()
|
| Правила форума "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. |