![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема при использовании dll в качестве plugina
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...