Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблемы с загрузкой пакетов функцией LoadPackage [D6]


Суслик ©   (2005-08-16 15:37:00) 

Ситуация:

Есть реализация plugins посредством runtime пакетов. При загрузке плугина функцией LoadPackage в плугине в одном модуле секций initialization выполняется, в другом нет.

Вопрос:

Если ли какие тонкости в использовании секции initialization в пакетах, которые загружаются функцией LoadPackage?


Суслик   (2005-08-16 18:11:00) [1]


> EnumModules


+f1

Какая полезная штука раздел хелпа "package support routines". :)

Спасибо. Метериала для чтения более чем достаточно.


DiamondShark   (2005-08-16 18:05:00) [2]


> ВОПРОС 2: Где в ПАКЕТЕ можно расположить код, который будет
> гарантированно выполнен в случае, если пакет включается
> в секцию requires другого пакета  и этот другой пакет загружается
> функцией LoadPackage?

Все секции initialization выполняются при загрузке пакета функцией LoadPackage.


> 1. как узнать в пакете все пакеты, которые перечислены в
> секции requires.

GetPackageInfo


> 2. как узнать в проекте все пакеты, которые перечислены
> в списке runtime packages в настройках проекта.

EnumModules


Суслик   (2005-08-16 17:49:00) [3]

Спасибо.

Я видел эту функцию. Да... что-то пропустил ее. Сейчас попробую.

Тогда вопрос:
1. как узнать в пакете все пакеты, которые перечислены в секции requires.
2. как узнать в проекте все пакеты, которые перечислены в списке runtime packages в настройках проекта.

?


Игорь Шевченко   (2005-08-16 17:38:00) [4]

Unit

Sysutils

Category

package support routines

procedure InitializePackage(Module: HMODULE);

Description

InitializePackage checks for duplicate units in a package and calls the initialization blocks of the contained units.

Note: InitializePackage is called internally by the LoadPackage function.


Суслик   (2005-08-16 17:23:00) [5]


> [4] DiamondShark ©   (16.08.05 16:13)

То, что поведение, описанное мною, является нормальным, я согласен.

ВОПРОС 1: Можно ли каким либо ДОКУМЕНТИРОВАННЫМ способом сделать так, чтобы секция initialization была выполнена для у каждого модуля, входящего в пакет?

ВОПРОС 2: Где в ПАКЕТЕ можно расположить код, который будет гарантированно выполнен в случае, если пакет включается в секцию requires другого пакета  и этот другой пакет загружается функцией LoadPackage?


Суслик   (2005-08-16 16:16:00) [6]


>  [4] DiamondShark ©   (16.08.05 16:13)


> Так не интересно...

терпи или... ну сам знаешь что можно сделать :)


DiamondShark   (2005-08-16 16:13:00) [7]

Ну, блин.
Так не интересно...


Суслик   (2005-08-16 16:09:00) [8]


> Не надо бороться с правильным поведением.


я уже понял (пока курил), что это поведение верное :)

всем спасибо за внимание :)


DiamondShark   (2005-08-16 16:05:00) [9]

Не надо бороться с правильным поведением.


Суслик   (2005-08-16 15:59:00) [10]

Виноват! Я обрасовал совершенно неверно ситуацию! :((

На самом деле так. Есть:
1. Приложение (назовем Project). В списке runtime пакетов имеет PluginPrototype. Грузит Plugin во время выполнения.
2. Пакет-прототип плугина (назовем PluginPrototype). Описывает предка для плугина.
3. Плугин (назовем Plugin). Реализует абстрактные классы из PluginPrototype.
4. Пакет, содержащий некоторые классы, которые использует Plugin (назовем Toolkit). С этим пакетом собственно и есть проблемы.

Plugin содержит в секции Requires пакеты PluginPrototype и Toolkit.
При этом в пакете Plugin ЯВНО (т.е. в секции uses) используется только один модуль из Toolkit (назовем его Unit1).
Другой модуль пакета Toolkit (назовем его Unit2) не используется (т.е. присутствует в секции uses) вообще нигде - ни в plugin, ни в unit1.
Оба модуля - unit1 и unit2 содержат секции initialization. Оная секция в модуле unit1 выполняется, в модуле unit2 - нет.

Вопрос - как с этим бороться? Нужно чтобы выполняласть секция из unit1 и unit2

ЗЫ. Один вариант - явно в plugin использовать unit2 - я знаю. Есть еще какие варианты?


Наверх

Титульная страница Поиск, карта сайта Написать письмо