Текущий архив: 2005.09.11;
Скачать: CL | DM;
ВнизПроблемы с загрузкой пакетов функцией LoadPackage Найти похожие ветки
← →
Суслик © (2005-08-16 15:37) [0]Ситуация:
Есть реализация plugins посредством runtime пакетов. При загрузке плугина функцией LoadPackage в плугине в одном модуле секций initialization выполняется, в другом нет.
Вопрос:
Если ли какие тонкости в использовании секции initialization в пакетах, которые загружаются функцией LoadPackage?
← →
Суслик © (2005-08-16 15:59) [1]Виноват! Я обрасовал совершенно неверно ситуацию! :((
На самом деле так. Есть:
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 - я знаю. Есть еще какие варианты?
← →
DiamondShark © (2005-08-16 16:05) [2]Не надо бороться с правильным поведением.
← →
Суслик © (2005-08-16 16:09) [3]
> Не надо бороться с правильным поведением.
я уже понял (пока курил), что это поведение верное :)
всем спасибо за внимание :)
← →
DiamondShark © (2005-08-16 16:13) [4]Ну, блин.
Так не интересно...
← →
Суслик © (2005-08-16 16:16) [5]
> [4] DiamondShark © (16.08.05 16:13)
> Так не интересно...
терпи или... ну сам знаешь что можно сделать :)
← →
Суслик © (2005-08-16 17:23) [6]
> [4] DiamondShark © (16.08.05 16:13)
То, что поведение, описанное мною, является нормальным, я согласен.
ВОПРОС 1: Можно ли каким либо ДОКУМЕНТИРОВАННЫМ способом сделать так, чтобы секция initialization была выполнена для у каждого модуля, входящего в пакет?
ВОПРОС 2: Где в ПАКЕТЕ можно расположить код, который будет гарантированно выполнен в случае, если пакет включается в секцию requires другого пакета и этот другой пакет загружается функцией LoadPackage?
← →
Игорь Шевченко © (2005-08-16 17:38) [7]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:49) [8]Спасибо.
Я видел эту функцию. Да... что-то пропустил ее. Сейчас попробую.
Тогда вопрос:
1. как узнать в пакете все пакеты, которые перечислены в секции requires.
2. как узнать в проекте все пакеты, которые перечислены в списке runtime packages в настройках проекта.
?
← →
DiamondShark © (2005-08-16 18:05) [9]
> ВОПРОС 2: Где в ПАКЕТЕ можно расположить код, который будет
> гарантированно выполнен в случае, если пакет включается
> в секцию requires другого пакета и этот другой пакет загружается
> функцией LoadPackage?
Все секции initialization выполняются при загрузке пакета функцией LoadPackage.
> 1. как узнать в пакете все пакеты, которые перечислены в
> секции requires.
GetPackageInfo
> 2. как узнать в проекте все пакеты, которые перечислены
> в списке runtime packages в настройках проекта.
EnumModules
← →
Суслик © (2005-08-16 18:11) [10]
> EnumModules
+f1
Какая полезная штука раздел хелпа "package support routines". :)
Спасибо. Метериала для чтения более чем достаточно.
Страницы: 1 вся ветка
Текущий архив: 2005.09.11;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.012 c