| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > КатастроФФа с RegisterClass (EFilerError) |
| Автор: vaddsm 20.7.2007, 07:10 | ||
Ситуация такая есть две dll каждая из которых имеет по форме, обе формы наследницы одного и тогоже класса (условно TОкноПрородитель), так вот после подключения к хост приложению каждая дллька регистрирует класс своей формы путем вызова RegisterClass.
Этот код находиться в хост приложении, а длл передается адрес на эту функцию. Так, вот с регистрацией первой формы проблем не возникло, а вот регистрация второй, приводит к ошибке A class named TОкноПрородитель already exists. Я в панике! Чего с этим можно сделать? P.S Дллели подключаются в рантайме. |
| Автор: vaddsm 20.7.2007, 07:28 | ||||||
НАШЕЛ подсказ на свою проблему:
http://www.delphikingdom.ru/asp/answer.asp?IDAnswer=25650 В моем случае Класс с одним и тем же именем это:
Его то и наследуют две злаполучные формы. Объясните мне пожалуйста как мне его в BPL завернуть и как этот самый BPL куда подключить чтобы решить описанную проблему. |
| Автор: HappyLife 20.7.2007, 16:09 |
| vaddsm, Зачем тебе регистрировать класс? Он итак регистрируется автоматом, когда создается форма. Либо пиши сам имя класса. И Используй свойство Name |
| Автор: vaddsm 20.7.2007, 18:36 | ||
Класс регистрируется, чтобы хост приложение могло сконструировать форму е имея представления из чего она сделана, только зная ее имя. Это реально если предварительно провести регистрацию класса как было сказано выше. а затем вызвать данный код:
В моем случае два плагина регистрируют разные формы но обе наследующие класс TОкноПрородитель. И когда регистрируется вторая форма, вылетает эксепшин что мол TОкноПрородитель уже зарегистрирован. Это происходит така как RegisterClass регистрирует все дерево классов. Со всеми его предками. ОДНАКО! если убрать из наследования формой TОкноПрородитель и вместо него сделать тривиальную форму наследницу TForm все пройдет на ура! Почему черт возьми так происходит! Кто мне может объяснить. Вот тут http://www.delphikingdom.ru/asp/answer.asp?IDAnswer=25650 написано черным по белому что проблему можно решить используя BPL, но как я не могу понять! |
| Автор: vaddsm 20.7.2007, 20:13 |
| УРА!!! Проблема решена! Собственно как и было сказано в упомянутой статье так и надо было сделаь. Всем столкнувшимся с подобной проблемой посвещаятся: Создайте компонент с проблемным классом. Затем подключите bpl к хост-приложению и ко всем плагинам (dll) статически. В области видимости тех мест где ваш компонент используется подключите инклудом хедр с описанием его класса. Откомпилируйте заново плагины и хост приложение. Воля! |