Форум: "Система";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];
Вниз---|Ветка была без названия|--- Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c