![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание библиотек bpl
Тфьу © (2007-02-27 12:05:00)Сделал библиотеку dll с фреймом. Передаю туда Application и панель, на которой должен быть размещен фрейм - никакой реакции. Включаю использование ShareMem - аналогично.
Решил сделать тоже самое через bpl. Однако package не может распознать слово "exports". Остались просто процедуры в interface:
function GetVersion:Cardinal;export;stdcall;
procedure RunModule(aApplication: TApplication; aControl:TPanel);export;stdcall;
function DoneModule:Boolean;export;stdcall;
Однако GetProcAddRess их не видит по имени. В dll в плане видимости было все нормально.
Сергей М. (2007-02-27 14:23:00) [1]
> каким образом главная форма знает, какой класс регистрировать
Главная форма ничего не "регистрирует", она создает объект некоего известного хост-приложению класса, регистрируемого ( единойдля обоих модулей - это важно !) самой bpl при ее инициализации.
> Во всех описаниях и примерах описания для объектов включаются
> в bpl и в главную программу
Ну а как ты хотел иначе ?
Компилятор же должен знать, что такое TMyFrame ...
Тфьу (2007-02-27 13:39:00) [2]А каким образом главная форма знает, какой класс регистрировать, если я динамически подключаю библиотеку? Во всех описаниях и примерах описания для объектов включаются в bpl и в главную программу. А это уже получается, что подключая новую библиотеку я должен перекомпилировать основную программу.
Сергей М. (2007-02-27 13:17:00) [3]
> Тфьу (27.02.07 13:10) [4]
Всеклассы, объявленные в интерфейсных разделах юнитов в составе dpk, ужеявляются экспортируемыми, так что не надо изобретать никаких велосипелов с exports и GetProcAddress.
Оба проекта собираешь с опцией Build With Run-Time Packages (sharemem не подключать !). Далее грузишь bpl (хоть статически хоть в динамике - без разницы) и в хост-приложении создаешь свой фрейм:
MyFrame := TMyFrame.Create(...);
MyFrame.Parent := MyPanel;
Все !!
Тфьу (2007-02-27 13:15:00) [4]Проблема №2 с ActiveX - если кто-то работает с библиотекой, обновить ее тоже нельзя (когда несколько человек одновременно работают на одном компьютере). В случае с пакетами - у каждого просто программа в своем каталоге.
Тфьу (2007-02-27 13:14:00) [5]ActiveX не регистрируется, если у клиента нет прав администратора на компьютере.
tesseract (2007-02-27 13:11:00) [6]
> Сделал библиотеку dll с фреймом.
Сделай лучше ActiveX с фреймом.
Тфьу (2007-02-27 13:10:00) [7]dll не может нормально фрейм передать. У меня главное приложение ноль реакции, когда dll на ней фрейм делает.
Сергей М. (2007-02-27 13:07:00) [8]
> делал по аналогии с dll
Ну и зачем тебе тогда bpl ?
Тфьу (2007-02-27 13:03:00) [9]В package (dpk), я делал по аналогии с dll
Сергей М. (2007-02-27 12:26:00) [10]
> package не может распознать слово "exports"
А где у тебя расположено это "слово" ?