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

Вниз

Как загрузить *.bpl и получить с него классы через GetClass   Найти похожие ветки 

 
incms   (2006-10-24 14:05) [0]

Загружаю пакет через LoadPackage  и делаю GetClass. Но GetClass возвращае nil.
Для каждого класса из пакета делаю RegisterClass в секции initialization.

Если в свойствах проекта ставлю галочку Build with runtime packages, то все работает. Но тогда мой проект компилится без пакетов, что мне не нужно.


 
DrPass ©   (2006-10-24 14:18) [1]


> Если в свойствах проекта ставлю галочку Build with runtime
> packages, то все работает

А если не поставишь, у загружаемых тобой пакетов будет свой экземпляр RTL, и вызываемая в них RegisterClass соответственно чихать хотела на твое приложение. Так что выбирай, тебе шашечки или ехать


 
DrPass ©   (2006-10-24 14:27) [2]

Забыл добавить, если ты загружаешь пакет через LoadPackage, тебе все равно придется тянуть с ним всякие rtl*.bpl/vcl*.bpl, т.к. он-то их использует. Так что в этом случае какого-либо смысла статически компоновать RTL с приложением нет.


 
incms   (2006-10-24 15:45) [3]

DrPass

А заставить прогу использовать для библиотеки уже имеющийся экземпляр RTL можно ?
Прога по сама должна работать без всяких доп файлов.
Нужно ехать с шашечками! :)


 
Игорь Шевченко ©   (2006-10-24 16:22) [4]


> А если не поставишь, у загружаемых тобой пакетов будет свой
> экземпляр RTL


Это как ?


 
DrPass ©   (2006-10-24 16:23) [5]


> А заставить прогу использовать для библиотеки уже имеющийся
> экземпляр RTL можно ?

В том-то и дело, что никак. Пакет ведь просто импортирует функции у известных ему библиотек. В проге есть такие же функции, статически с ней скомпонованные, но скомпилированному отдельно от нее пакету они, само собой, недоступны.
А что тебе мешает запихать в дистрибутив программы дополнительные файлы?


 
DrPass ©   (2006-10-24 16:25) [6]


> Игорь Шевченко ©   (24.10.06 16:22) [4]

Один - статически скомпонованный с программой, другой - в rtl*.bpl, которая загрузится в адресное пространство приложения первым же пакетом


 
incms   (2006-10-24 17:38) [7]

DrPass

В том то и дело, что запихать нельзя - файл библиотеки будет меняться и зависить это будет от конфигурации системы пользователя.


> Пакет ведь просто импортирует функции у известных ему библиотек.
>  В проге есть такие же функции, статически с ней скомпонованные,
>  но скомпилированному отдельно от нее пакету они, само собой,
>  недоступны.


Но если установить флаг, то библиотеки подгружаются динамически и в одну RTL. Не понятно что мешает это делать вручную...

Собственно в библиотеке содержатся формы, вот и не хотел делать в dll, дабы иметь полный доступ к объектам. Хотя наверное прийдется с dll извращаться :(


 
incms   (2006-10-24 17:38) [8]

DrPass

В том то и дело, что запихать нельзя - файл библиотеки будет меняться и зависить это будет от конфигурации системы пользователя.


> Пакет ведь просто импортирует функции у известных ему библиотек.
>  В проге есть такие же функции, статически с ней скомпонованные,
>  но скомпилированному отдельно от нее пакету они, само собой,
>  недоступны.


Но если установить флаг, то библиотеки подгружаются динамически и в одну RTL. Не понятно что мешает это делать вручную...

Собственно в библиотеке содержатся формы, вот и не хотел делать в dll, дабы иметь полный доступ к объектам. Хотя наверное прийдется с dll извращаться :(


 
Ketmar ©   (2006-10-24 17:41) [9]

>[8] incms 24-Oct-2006, 17:38
если
>Не понятно что мешает это делать вручную...

то
>наверное прийдется с dll извращаться :(
лучше не надо.


 
Игорь Шевченко ©   (2006-10-24 17:42) [10]

DrPass ©   (24.10.06 16:25) [6]

Тьфу! :) Извини, не увидел, что он пытается загрузить пакет из не-bplного EXEшника.


 
DrPass ©   (2006-10-24 17:50) [11]


> incms   (24.10.06 17:38) [8]

Так пусть себе меняются. Главное, чтобы с приложением был стандартный набор bpl-ок RTL и VCL, а свои плагины добавляй/удаляй/меня в любом количестве и конфигурации.

> Но если установить флаг, то библиотеки подгружаются динамически
> и в одну RTL. Не понятно что мешает это делать вручную

Правильно, в этом случае само приложение будет использовать RTL из rtl*.bpl - той же библиотеки, что и пакеты. А если флаг снять, модули RTL просто скомпонуются с приложением, и получится две копии - одна скомпонованная, вторая в rtl*.bpl.

>  Хотя наверное прийдется с dll извращаться :(

Не надо. Результат будет тот же, плюс еще масса граблей, плюс та же RTL, но уже в количестве N экземпляров, где N - число DLL + EXE :)
Если хочешь иметь формы в плагинах, то самый разумный вариант (и, пожалуй, единственно пригодный к использованию) - ставить этот флажок и распространять библиотеки RTL/VCL вместе с приложением.


 
GrayFace ©   (2006-10-24 17:56) [12]

А может без библиотеки?


 
incms   (2006-10-25 11:07) [13]


> DrPass


Проблема в том, что должен быть ОДИН EXE файл без всяких довесков, и это естественно должно работать. (Не я это придумал, но к сожалению именно так надо) Ну а наличие/отсутствие плагина проверяется в программе, поэтому без него она может работать.

Кстати если загружать BPL с отключенным флажком, то как я понял, она работает как обычная DLL, только к ней теперь надо весь набор используемых пакетов?


 
Сергей М. ©   (2006-10-25 11:23) [14]

http://delphiworld.narod.ru/base/little_about_plugins.html


 
Amoeba ©   (2006-10-25 12:19) [15]

И еще статьи:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=468
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=274


 
incms   (2006-10-25 13:19) [16]


> Сергей М.

,
> Amoeba


Все то хороше, я как раз через COM и работаю. Но вот то, что нельзя скомпилить проект со статическими библиотеками - это и есть проблема.


 
Сергей М. ©   (2006-10-25 13:23) [17]


> нельзя скомпилить


Чтой-то вдруг "нельзя" ?

То что ты получил отлуп во время компиляции, это вовсе не означает что "нельзя".

Следует просто разобраться в претензиях компилятора и устранить причины, по которым он изволит "капризничать". А причины - в ошибках в тексте твоего (!!) кода. Который есть тайна за семью печатями)..


 
DrPass ©   (2006-10-25 15:34) [18]


> incms   (25.10.06 13:19) [16]

Если требование - один EXE (господи, зачем???! И что мешает это требование убрать?), тогда один выход - использовать WinAPI-окна в DLL, а не формы


 
incms   (2006-10-25 17:58) [19]


> DrPass



> Если требование - один EXE (господи, зачем???! И что мешает
> это требование убрать?)


...иногда так тяжело понять своего начальника...
ну не я так решил, но мне этого не изменить :(


 
incms   (2006-10-25 17:58) [20]


> DrPass



> Если требование - один EXE (господи, зачем???! И что мешает
> это требование убрать?)


...иногда так тяжело понять своего начальника...
ну не я так решил, но мне этого не изменить :(


 
atruhin ©   (2006-10-25 19:12) [21]

> Если требование - один EXE (господи, зачем???! И что мешает
> это требование убрать?), тогда один выход - использовать
> WinAPI-окна в DLL, а не формы

Почему же? ActiveX формы, какие проблеммы?


 
DrPass ©   (2006-10-25 20:28) [22]


> Почему же? ActiveX формы, какие проблеммы?

Проблемы - те же самые: таскать вместе с плагинами все *.bpl, либо статически их компоновать с каждым плагином.


 
atruhin ©   (2006-10-25 21:53) [23]

> либо статически их компоновать с каждым плагином.

Естественно. Я пояснения автора видать не внимательно прочитал, думал ему это и нужно.


 
GrayFace ©   (2006-10-27 10:21) [24]

incms   (25.10.06 17:58) [20]
...иногда так тяжело понять своего начальника...
ну не я так решил, но мне этого не изменить :(

Может попробовать запускать dll с обычным кодом "... Application.Run" в отдельном потоке?


 
Сергей М. ©   (2006-10-27 10:36) [25]


> GrayFace ©   (27.10.06 10:21) [24]


?!


 
GrayFace ©   (2006-10-29 15:51) [26]

Сергей М. ©   (27.10.06 10:36) [25]
Не понятна реакция.



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

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

Наверх




Память: 0.53 MB
Время: 0.048 c
15-1164106468
zdm
2006-11-21 13:54
2006.12.10
IDSmtp


15-1164102361
Cyrax
2006-11-21 12:46
2006.12.10
Чем отличается кодер от программиста ?


2-1163583511
Stasmor
2006-11-15 12:38
2006.12.10
Почему код не работает на Win98, но чудесно работает в XP(RS232)


2-1164270535
webpauk
2006-11-23 11:28
2006.12.10
как правильно записать следующую конструкцию?


3-1160038014
Lex_!
2006-10-05 12:46
2006.12.10
Вычисляемые поля при динамическом формировании колумов