![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как загрузить *.bpl и получить с него классы через GetClass [D7, Win2k, WinXP]
incms © (2006-10-24 14:05:00)Загружаю пакет через LoadPackage и делаю GetClass. Но GetClass возвращае nil.
Для каждого класса из пакета делаю RegisterClass в секции initialization.
Если в свойствах проекта ставлю галочку Build with runtime packages, то все работает. Но тогда мой проект компилится без пакетов, что мне не нужно.
GrayFace (2006-10-29 15:51:00) [1]Сергей М. © (27.10.06 10:36) [25]
Не понятна реакция.
Сергей М. (2006-10-27 10:36:00) [2]
> GrayFace © (27.10.06 10:21) [24]
?!
GrayFace (2006-10-27 10:21:00) [3]incms (25.10.06 17:58) [20]
...иногда так тяжело понять своего начальника...
ну не я так решил, но мне этого не изменить :(
Может попробовать запускать dll с обычным кодом "... Application.Run" в отдельном потоке?
atruhin (2006-10-25 21:53:00) [4]> либо статически их компоновать с каждым плагином.
Естественно. Я пояснения автора видать не внимательно прочитал, думал ему это и нужно.
DrPass (2006-10-25 20:28:00) [5]
> Почему же? ActiveX формы, какие проблеммы?
Проблемы - те же самые: таскать вместе с плагинами все *.bpl, либо статически их компоновать с каждым плагином.
atruhin (2006-10-25 19:12:00) [6]> Если требование - один EXE (господи, зачем???! И что мешает
> это требование убрать?), тогда один выход - использовать
> WinAPI-окна в DLL, а не формы
Почему же? ActiveX формы, какие проблеммы?
incms (2006-10-25 17:58:00) [7]
> DrPass
> Если требование - один EXE (господи, зачем???! И что мешает
> это требование убрать?)
...иногда так тяжело понять своего начальника...
ну не я так решил, но мне этого не изменить :(
incms (2006-10-25 17:58:00) [8]
> DrPass
> Если требование - один EXE (господи, зачем???! И что мешает
> это требование убрать?)
...иногда так тяжело понять своего начальника...
ну не я так решил, но мне этого не изменить :(
DrPass (2006-10-25 15:34:00) [9]
> incms (25.10.06 13:19) [16]
Если требование - один EXE (господи, зачем???! И что мешает это требование убрать?), тогда один выход - использовать WinAPI-окна в DLL, а не формы
Сергей М. (2006-10-25 13:23:00) [10]
> нельзя скомпилить
Чтой-то вдруг "нельзя" ?
То что ты получил отлуп во время компиляции, это вовсе не означает что "нельзя".
Следует просто разобраться в претензиях компилятора и устранить причины, по которым он изволит "капризничать". А причины - в ошибках в тексте твоего(!!) кода. Который есть тайна за семью печатями)..
incms (2006-10-25 13:19:00) [11]
> Сергей М.
,
> Amoeba
Все то хороше, я как раз через COM и работаю. Но вот то, что нельзя скомпилить проект со статическими библиотеками - это и есть проблема.
Amoeba (2006-10-25 12:19:00) [12]И еще статьи:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=468
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=274
Сергей М. (2006-10-25 11:23:00) [13]http://delphiworld.narod.ru/base/little_about_plugins.html
incms (2006-10-25 11:07:00) [14]
> DrPass
Проблема в том, что должен быть ОДИН EXE файл без всяких довесков, и это естественно должно работать. (Не я это придумал, но к сожалению именно так надо) Ну а наличие/отсутствие плагина проверяется в программе, поэтому без него она может работать.
Кстати если загружать BPL с отключенным флажком, то как я понял, она работает как обычная DLL, только к ней теперь надо весь набор используемых пакетов?
GrayFace (2006-10-24 17:56:00) [15]А может без библиотеки?
DrPass (2006-10-24 17:50:00) [16]
> 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 вместе с приложением.
Игорь Шевченко (2006-10-24 17:42:00) [17]DrPass © (24.10.06 16:25) [6]
Тьфу! :) Извини, не увидел, что он пытается загрузить пакет из не-bplного EXEшника.
Ketmar (2006-10-24 17:41:00) [18]>[8] incms 24-Oct-2006, 17:38
если
>Не понятно что мешает это делать вручную...
то
>наверное прийдется с dll извращаться :(
лучше не надо.
incms (2006-10-24 17:38:00) [19]DrPass
В том то и дело, что запихать нельзя - файл библиотеки будет меняться и зависить это будет от конфигурации системы пользователя.
> Пакет ведь просто импортирует функции у известных ему библиотек.
> В проге есть такие же функции, статически с ней скомпонованные,
> но скомпилированному отдельно от нее пакету они, само собой,
> недоступны.
Но если установить флаг, то библиотеки подгружаются динамически и в одну RTL. Не понятно что мешает это делать вручную...
Собственно в библиотеке содержатся формы, вот и не хотел делать в dll, дабы иметь полный доступ к объектам. Хотя наверное прийдется с dll извращаться :(
incms (2006-10-24 17:38:00) [20]DrPass
В том то и дело, что запихать нельзя - файл библиотеки будет меняться и зависить это будет от конфигурации системы пользователя.
> Пакет ведь просто импортирует функции у известных ему библиотек.
> В проге есть такие же функции, статически с ней скомпонованные,
> но скомпилированному отдельно от нее пакету они, само собой,
> недоступны.
Но если установить флаг, то библиотеки подгружаются динамически и в одну RTL. Не понятно что мешает это делать вручную...
Собственно в библиотеке содержатся формы, вот и не хотел делать в dll, дабы иметь полный доступ к объектам. Хотя наверное прийдется с dll извращаться :(