Форум: "Основная";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
ВнизКак загрузить *.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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.048 c