Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема при использовании dll в качестве plugina


Страницы:   1 2

Profi ©   (2005-06-02 22:50:00) 

Делаю программу с поддержкой plugin'ов в виде dll. Экспортирую в dll указатель на главную форму. На форме нахожу панель с именем Panel используя FindComponent. А вот добавить на неё кнопку не могу. Выскакивает ошибка: Exception EconvertError in modul Project1.exe at 0001939C. Как бороться? Код внутри dll:

Var panel1:Tpanel;
Button1:Tbutton;
Begin
Panel1:=Tpanel.create(nil);
Panel1:=Tpanel(MainForm.FindComponent('Panel');
Button1:=Tbutton.create(nil);
Button1.parent:=Panel1;
End;


Eraser   (2005-06-02 23:15:00) [21]

Profi ©
Возможно тут найдёшь http://www.podgoretsky.com/- инфы на сайте много, но надо искать...


Profi   (2005-06-02 23:15:00) [22]

Юрий Зотов ©   (02.06.05 23:13) [9]
Уже убедился. Но все-таки можно простой пример, как добавить кнопку. Дальше наверно смогу сам.


Юрий Зотов   (2005-06-02 23:13:00) [23]

> Profi ©   (02.06.05 23:07) [4]

Если проекты Exe и DLL не компилировались с run-time пакетами (причем оба ), то SomeVar всегда будет False.


Profi   (2005-06-02 23:13:00) [24]

Eraser ©   (02.06.05 23:11) [6]
Кинь ссылку, где конкретно про это написанно, а то не могу найти. Все книжки про delphi про ООП говорят только бла-бла-бла.


Profi   (2005-06-02 23:11:00) [25]

Sergey Masloff   (02.06.05 23:09) [5]
Согласен. Да и первую строку можно убрать. Но ведь цвет и все остальное могу менят.


Eraser   (2005-06-02 23:11:00) [26]

Profi ©   (02.06.05 22:57) [2]

Рекомендуется почитать про объектно-ориентированное программирование.


Sergey Masloff   (2005-06-02 23:09:00) [27]

Profi ©   (02.06.05 23:07) [4]
>Он будет true.
Рекомендую проверить. Осмелюсь предположить что True он не будет.


Profi   (2005-06-02 23:07:00) [28]

Sergey Masloff   (02.06.05 23:03) [3]
Он будет true.


Sergey Masloff   (2005-06-02 23:03:00) [29]

Поясню.
>Panel1:=Tpanel.create(nil);
Аллоцировали память, создали в ней экземпляр компонента и указатель в Panel1 указывает на этот объект

>Panel1:=Tpanel(MainForm.FindComponent('Panel');
Присвоили указателю другое значение. Память с созданым предыдущей строкой объектом вы потеряли навсегда. Неужели это непонятно?

Рекомендую еще следующий эксперимент. Написать

if (MainForm.FindComponent('Panel') is TPanel) then
 someVar = True
else
 someVar = False;

И проследить значение переменной SomeVar.


Profi   (2005-06-02 22:57:00) [30]

Sergey Masloff   (02.06.05 22:53) [1]
Все просто. Я создаю внутри dll панель и присваиваю ей указатель на панель на главной форме. Я могу с ней делать все: менять цвет, caption, размер. А вот кнопку добавить не могу.


Sergey Masloff   (2005-06-02 22:53:00) [31]

Да, интересный код. Первые 2 строки после Begin...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо