Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.044 c
15-1163678149
Kolan
2006-11-16 14:55
2006.12.10
Что значит присоединенная информация :KAVICHS:$DATA


4-1154212729
Spirit111
2006-07-30 02:38
2006.12.10
Как получить список всех контейнеров в данном криптопровайдере?


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


3-1159871123
ККВ
2006-10-03 14:25
2006.12.10
Как получить значение поля?


2-1163951411
Alians
2006-11-19 18:50
2006.12.10
RasEnumEntriesA





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский