|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.12.2013, 16:09 | #1 |
Пользователь
Регистрация: 09.07.2010
Сообщений: 89
|
Проблема с вызовом статического метода перегруженного класса, полученного через GetClass
Добрый день. Ситуация такая.
Имеем: класс TTool (от TPersistent) со статическим методом CreateControls; наследников от класса TTool, предварительно зарегистрированных (RegisterClass), с перегруженным методом CreateControls; переменную lcc - класс, по имени которого через GetClass получается наследник от TTool (имена этих классов точно правильные, проверил уже раза 3); А также нижеприведенный код, который вылетает с EAccessViolation: Код:
Код:
Может кто-нибудь подскажет, в чём проблема? Благодарен буду. P.S.: Исходники на GitHub. Проблемное место. Проект под Lazarus. |
16.12.2013, 16:34 | #2 | |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,885
|
Если не ошибаюсь (некогда проверить), то
Код:
Цитата:
TPersistentClass это class ref - ссылка на класс. TTool же это сам класс. Полагаю, Вам придётся создать тип ссылки на класс Код:
Код:
и уже потом вызывать свой метод, который, к слову, имеет смысл сделать виртуальным и нестатическим. Да даже подумайте вот сами, как должен компиль вызвать Ваш метод (даже опустив что у классовой ссылки скастованной в класс предка это невозможно), если он у Вас статический, а Вы хотите зависящий от наследника. Как будет время, копну свой код, как я подобные интерфейсо-построители писал. Кстати, что пишете ? на гитхабе глянул вползуба , но конкретики не нашёл. Последний раз редактировалось phomm; 16.12.2013 в 16:37. |
|
16.12.2013, 16:38 | #3 |
Пользователь
Регистрация: 09.07.2010
Сообщений: 89
|
Да, логично.
Спасибо! |
16.12.2013, 16:52 | #4 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,885
|
Кстати, вспомнил, недавно вот обсуждали, хоть и не совсем то, но примеры по GetClass , есть куда покопать.
http://programmersforum.ru/showthread.php?t=247508 |
16.12.2013, 16:53 | #5 |
Пользователь
Регистрация: 09.07.2010
Сообщений: 89
|
Векторный редактор графики, задание на первый семестр первого курса.
И я так понял, GetClass (как и весь RTTI) - костыль, юзать его нехорошо. |
16.12.2013, 17:23 | #6 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,885
|
Ну, я бы не сказал, что это костыль. Как и любое другое средство - в нужное время в нужном месте и в нужных руках даёт свои результаты, а криво можно даже сложением пользоваться. Недаром в дельфи2010 сильно улучшили RTTI, да и в дотнете вон поглядите, что рефлексией бывает вытворяют.
Последний раз редактировалось phomm; 16.12.2013 в 17:25. |
16.12.2013, 18:05 | #7 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
А почему вместо огорода с GetClass не просто
lcc.CreateControls или TTool(lcc).CreateControls
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
16.12.2013, 18:19 | #8 |
Пользователь
Регистрация: 09.07.2010
Сообщений: 89
|
Не всё так просто - lcc - ссылка не на тот класс, который мне нужен.
Глядите: GetClass(Concat(lcc.ClassName, 'Tool')) - имя класса lcc конкатенируется с тулой. Да и собственно проблема решена, спасибо phomm'у, я упорно не замечал, что не к тому типу привожу. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
JList Listener непонятки c вызовом метода из другого класса | alekola | Общие вопросы по Java, Java SE, Kotlin | 1 | 22.11.2012 02:12 |
Достучаться до контрола из под статического метода | coNsept | C# (си шарп) | 1 | 03.10.2012 09:29 |
Динамическая загрузка статического метода из DLL | Granus | Общие вопросы C/C++ | 6 | 15.02.2012 15:47 |
Преобразование в строчный тип данных(Ошибка не содержит статического метода "Main", подходящего для точки входа) | aly-lucenko | Помощь студентам | 8 | 02.10.2011 11:36 |
Проблема с вызовом | Юлия_utcit | HTML и CSS | 0 | 03.01.2011 23:00 |