Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.15;
Скачать: CL | DM;

Вниз

---|Ветка была без названия|---   Найти похожие ветки 

 
Lmatveev   (2002-04-23 22:01) [0]

Всем привет!
Вот с какой проблемой столкнулся:
Всю жизнь делал всякие плагины с помощью обычных DLL. А тут попробовал BPL. Делаю так:
1.Из основной программы (с MDI формой) вызываю LoadPackage()
2.По GetProcAddress получаю адрес процедуры в пакадже, которая объявлена как stdcall и прописана в exports
3.Вызываю эту процедуру и передаю ей переменные Application, Screen и ссылку на ADOConnection с помощью TADOConnection.ConnectionObject.
4.В процедуре присваиваю переменным Application и Screen полученные значения.
5.Там же создаю DataModule и объекту TADOConnection, расположенному на нем присваиваю полученный ConnectionObject.
6.Там же создаю и показываю MDIChild форму.
Все работает нормально.
Но потом началось самое интересное:
Я поместил на форму компонент TADOQuery (даже свойств ему никаких не ставил) и тут же получил ошибку "Application is not licensed to use this feature"... Что меня повергло в шоковое состояние.
Покопался в исходниках. Оказывается вызывает эту ошибку процедура sysutils.RPR, которая вызывается из TDataSet.Create.

Резюме:

Может хоть у кого-нибудь есть идеи, что это все значит и как с этим бороться. Наверное, я с пакаджами как-то не так работаю... Подскажите, в чем я не прав...


 
Suntechnic ©   (2002-04-24 05:33) [1]

http://community.borland.com/article/0,1410,27031,00.html


 
Lmatveev   (2002-04-24 10:44) [2]

Спасибо за линк. Там написано, что эта ошибка возникает только если пытаться совместить разные редакции Delphi. Но я-то все делаю на одной машине на которой в жизни ничего не стояло кроме D6 Enterprise.
Может есть еще идеи...


 
Lmatveev   (2002-04-24 11:15) [3]

Могу локализовать проблему.
Тоже самое происходит если просто сказать LoadPackage,
вызвать из него некую процедуру по GetProcAddress, а в ней попытаться создать любой TDataSet.


 
Севостьянов Игорь ©   (2002-04-24 12:31) [4]

Исходя из того что делает sysutils.RPR можно судить, что она не можеть загрузить Resources (RC_DATA). Не буду утверждать, но попробуй удалить *.res файлы для проекта и для *.bpl (*.dpk) Delphi скажет, что не находит его и пересоздаст *.res файл
В принципе там ведь в *.res и с версией что-то связано...
Пробуй...


 
Lmatveev   (2002-04-24 13:30) [5]

Я наконец разобрался. Может кому интересно...
Оказывается, чтобы в качестве плагинов использовать BPL надо основное приложение компилировать с "Build with runtime packages". Тогда у основного приложения и плагина будут уже общие Application, Screen и т.п. А использовать его надо так:
В плагине в initialization написать RegisterClass(), а в основном приложении уже работать с этими классами через GetClass()


 
Севостьянов Игорь ©   (2002-04-24 17:03) [6]

Build with runtime packages
Это же азы - кто ж мог догаться, что ты не включил сию опцию
Она показывает что все, что в bpl не надо в exe засовывать и т.д.
Все тоже со стандартными bpl (VCL и т.д.) - Exe файл маленький, но требует bpl вместе с собой



Страницы: 1 вся ветка

Текущий архив: 2002.07.15;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
3-47214
Miss
2002-06-19 16:53
2002.07.15
Перенос данных в другую таблицу


6-47637
JohnKZ
2002-05-04 09:29
2002.07.15
Help


7-47832
zooooo
2002-04-22 02:20
2002.07.15
Отключение/включение мыши/клавы


1-47252
Skywalker
2002-06-27 12:13
2002.07.15
Алгоритм деления


3-47218
Я_Чайник
2002-06-20 06:10
2002.07.15
Дополнить таблицу