Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Загрузка пакета bpl ч/з LoadLibrary


Автор: Avers 12.1.2009, 11:59
http://gunsmoker.blogspot.com/ - информация на эту тему, спс CodeMonkey))
Попробовал так сделать, решил проблему. 
Нужно было компонент, используемый и в приложении и в плагине влинковывать и туда и туда (странное желание, но.... ), чтобы не создавать еще одного пакета, требуемого приложению и плагину для работы.

Но! Одно но!
Компопнент DevExpress (а именно TcxButton) не желает принимать вид в стиле XP, т.е. несмотря на 
Код

  ...
  Btn.LookAndFeel.NativeStyle := True;
  ...

остается в стиле, который принимает по умолчанию (W98).

Подскажите, возможно ли, и как решить таку проблемку.

Автор: CodeMonkey 12.1.2009, 14:47
Может манифест XP-ёвый надо подключить?

Автор: Avers 12.1.2009, 19:31
Мне видится проблема в том, что не выполняются (как я понял) части Initialization  и Finalization Unit'ов, находящихся в пакете (а у DevExpress эти части не пусты).

И еще вопрос:
Как правильно выгрузить пакеты (загруженные ч/з LoadLibrary)?? 
Например у меня возникает проблема, если пользователь отказывается логонится и закрывает форму аутентификации (она - есть один из пакетов) - винда пишет, что в приложении и ошибка и предлагает отправить куда-то об этом отчет smile (Интересно куда??). Если же пользователь успешно логонится и открывает программу, то при закрытии ни каких проблем и ошибок не возникает........ Меняю LoadLibrary на LoadPackage - все нормально... ошибок нет ни при нормальном закрытии, ни при отказе пользователя логонится...
%) - чувствую себя средневековым человеком, которому предложили управлать космическим кораблем.

Добавлено через 1 минуту и 52 секунды
но манифест обязательно попробую
И компонентик девэкспресовский (спец для этого дела) тоже надо заюзать.

Кста, если сменить LoadLibrary на LoadPackage - это решает проблему с отображением кнопок

Автор: CodeMonkey 12.1.2009, 20:33
Я не понял, а вы вызываете http://gunsmoker.blogspot.com/2008/12/5.html пакета или нет?

Цитата(Avers @  12.1.2009,  19:31 Найти цитируемый пост)
Как правильно выгрузить пакеты (загруженные ч/з LoadLibrary)?? 

Очевидно: FreeLibrary.

Цитата(Avers @  12.1.2009,  19:31 Найти цитируемый пост)
винда пишет, что в приложении и ошибка

Значит в приложении действительно ошибка. И её нужно искать.

Автор: Avers 13.1.2009, 09:39
Цитата(CodeMonkey @  12.1.2009,  20:33 Найти цитируемый пост)
Очевидно: FreeLibrary.

Вопрос в том, обязательно ли выгружать ее вручную. Ну, к примеру с пакетами (т.е. при использовании LoadPackage), это делать не обязательно (http://forum.vingrad.ru/forum/topic-240495.html)... Напрашивается ответ, что случай с LoadLibrary аналогичен, и можно вручную не выгружать. Но лучше узнать, чем предполагать))

Цитата(CodeMonkey @  12.1.2009,  20:33 Найти цитируемый пост)
Я не понял, а вы вызываете функцию Initialize пакета или нет?

Пробовал и так и эдак, т.е. в данном случае вызов функции Initialize можно опустить - пакет функционирует нормально - проблема лишь с внешним видом кнопок.
Если вызвать, то возникает ошибка. Как я понял, это один из модулей компонента (cxButton), который продублирован в приложении и в загружаемом пакете, пытается снова зарегестрировать класс cxRec (без понятия че за класс и зачем он нужен - полазил по unit'ам - не нашел). О чем совственно и сообщает ошибка.... 

Автор: Avers 13.1.2009, 10:26
Словом, проблему с ошибкой при досрочном закрытии формы аутентификации временно решил - просто заменил LoadLibrary на LoadPackage, ибо нет времени устранить истинную причину.
Проблема на самом деле в интерфейсе, который я передавал от приложения пакету (форме аутентификации). Передавал в качестве свойства интерфейса самой формы..... теперь понимаю, что это только лишний гемор (прошу прощения) при выгрузке пакета.... 

Автор: CodeMonkey 13.1.2009, 11:23
>>> Напрашивается ответ, что случай с LoadLibrary аналогичен, и можно вручную не выгружать
Ну если идёт выход из программы - то, разумеется, можно и не выгружать вручную.

Автор: Avers 20.1.2009, 11:13
XPManifest увы, не желает работать вне приложения... :(
В моем случае - он не желает придать божеский вид кнопками на форме из пакета. Причем не зависимо от того, как этот самый пакет подгружать - хоть через LoadLibrary (с выполнением процедуры Initialize), хоть через LoadLibrary.

Добавлено через 2 минуты и 59 секунд
Сорри... поспешил....
Прост по незнанию и неумению (до этого манифест не использовал ни разу) я его и забросил на форму, в пакет. 
Положив его на главную форму приложения - проблема решилась. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)