Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Слабые пакеты bpl, Деректива {$WEAKPACKAGEUNIT ON} 
:(
    Опции темы
Avers
Дата 30.9.2008, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.6.2008
Где: 26rus

Репутация: нет
Всего: нет



Ищу пример использования данной директивы.
Буду рад любому исходнику или просто пояснению "на пальцах" сути и преимуществ слабых пакетов.
--------------------
Born to be wild
PM MAIL   Вверх
Alexeis
Дата 30.9.2008, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



По моему в хелпе все четко описано 
Цитата

The $WEAKPACKAGEUNIT directive affects the way a .dcu file is stored in a Delphi package's .dcp and .bpl files on the Win32 platform, or, analogously, how a .dcuil file is stored in the package's .dcpil and .dll files on the .NET platform. If {$WEAKPACKAGEUNIT ON} appears in a unit file, the compiler omits the unit from bpls or dlls when possible, and creates a non-packaged local copy of the unit when it is required by another application or package. A unit compiled with this directive is said to be "weakly packaged." 

For example, suppose a package called PACK contains only one unit, UNIT1. Suppose UNIT1 does not use any further units, but it makes calls to RARE.DLL. If the {$WEAKPACKAGEUNIT ON} directive is inserted in UNIT1.pas before compiling, UNIT1 will not be included in PACK.BPL (or PACK.DLL on .NET); copies of RARE.DLL will not have to be distributed with PACK. However, UNIT1 will still be included in PACK.dcp (or PACK.dcpil on .NET). If UNIT1 is referenced by another package or application that uses PACK, it will be copied from PACK.dcp (or PACK.dcpil on .NET) and compiled directly into the project. 

Now suppose a second unit, UNIT2, is added to PACK. Suppose that UNIT2 uses UNIT1. This time, even if PACK is compiled with {$WEAKPACKAGEUNIT ON} in UNIT1.pas, the compiler will include UNIT1 in PACK.BPL (or PACK.DLL on .NET). But other packages or applications that reference UNIT1 will use the (non-packaged) copy taken from PACK.dcp (or PACK.dcpil on .NET). 

Note: Note: Unit files containing the {$WEAKPACKAGEUNIT ON} directive must not have global variables, initialization sections, or finalization sections. 
The $WEAKPACKAGEUNIT directive is an advanced feature intended for developers who distribute their packages to other programmers. It can help to avoid distribution of infrequently used DLLs, and to eliminate conflicts among packages that may depend on the same external library. 


В двух словах это нужно для разруливания проблем версий многократного включения модулей в пакеты. Скажем unit2 включён в проект пакета, теперь если у unit2 в uses есть unit1 помеченный директивой {$WEAKPACKAGEUNIT ON}, то в исполняемый модуль будет включён как unit2 так и unit1. Если происходит сборка с пакетами, то это позволит избежать включения некоторых лишних пакетов.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Avers
Дата 30.9.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.6.2008
Где: 26rus

Репутация: нет
Всего: нет



Ja, ja. Naturlich. 
К сожалению у меня туго с английским (в школе и ВУЗе учил немецкий).
Но за ответ спасибо +1
Есть еще вопрос (который беспокоит меня больше всего): позволит ли это прилинковывать статически к разным пакетам (используемым в run-time) одни и теже модули?
Т.е. у меня есть редкоиспользуемые модули и по определенным причинам мне не хочется таскать следом за проемтом еще одну bpl'ку. Я прилинковываю этот модуль(модули) к паре разных пакетов (помечаю модули {$WEAKPACKAGEUNIT ON}). Конфликт при загрузке все равно будет возникать?

Упс.... мне постов не хватает, чтобы изменить репутацию:(

Это сообщение отредактировал(а) Avers - 30.9.2008, 10:39
--------------------
Born to be wild
PM MAIL   Вверх
THandle
Дата 30.9.2008, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



Цитата(Avers @  30.9.2008,  11:39 Найти цитируемый пост)
Упс.... мне постов не хватает, чтобы изменить репутацию:(



Поставит плюсик от твоего имени smile
PM   Вверх
Alexeis
Дата 30.9.2008, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Avers @  30.9.2008,  09:39 Найти цитируемый пост)
Есть еще вопрос (который беспокоит меня больше всего): позволит ли это прилинковывать статически к разным пакетам (используемым в run-time) одни и теже модули?
Т.е. у меня есть редкоиспользуемые модули и по определенным причинам мне не хочется таскать следом за проемтом еще одну bpl'ку. Я прилинковываю этот модуль(модули) к паре разных пакетов (помечаю модули {$WEAKPACKAGEUNIT ON}). Конфликт при загрузке все равно будет возникать?

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Avers
Дата 3.10.2008, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.6.2008
Где: 26rus

Репутация: нет
Всего: нет



Спасибо)
Буду ковырять.
--------------------
Born to be wild
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0493 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.