Plugins::delHooks - очищаются ли переменные?

Дополнения к OpenKore, расширяющиее её функциональность, называются плагинами.

Модератор: 4epT

Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Plugins::delHooks - очищаются ли переменные?

Сообщение 4epT »

в общем есть такой код:
my $hooks = Plugins::addHooks(['AI_pre', \&checkStatus]);
my $hook = Plugins::addHooks(['charSelectScreen', \&createChar, undef]);

sub Unload {
message "hooks = $hooks\n", 'system';
Plugins::delHooks($hooks);
message "DEL hooks = $hooks\n\n", 'system';
message "hook $hook\n", 'system';
Plugins::delHooks($hook);
message "DEL hook = $hook\n", 'system';
}
делаем перезагрузку плагина командой "plugin reload":
plugin reload ххх
ххх plugin will unload
hooks = Plugins::HookHandles=ARRAY(0x2872684)
DEL hooks = Plugins::HookHandles=ARRAY(0x2872684)

hook Plugins::HookHandles=ARRAY(0x3220f08)
DEL hook = Plugins::HookHandles=ARRAY(0x3220f08)
Loading plugin plugins/ххх.pl...
получается какие значения $hooks и $hook были, такие они и остались? или я что-то не понимаю?
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: Plugins::delHooks - очищаются ли переменные?

Сообщение EternalHarvest »

Наверное, в $hooks и $hook остаются указатели на адреса памяти. Которые уже удалены из хуков.

Добавлено спустя 2 минуты 12 секунд:
(delHooks как бы и не может изменить то, что передано по значению?)
Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Re: Plugins::delHooks - очищаются ли переменные?

Сообщение Click »

может не удалять а устанавливать в пусто ""?
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Re: Plugins::delHooks - очищаются ли переменные?

Сообщение 4epT »

не, ну во всех плагинах именно так и написано :)
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: Plugins::delHooks - очищаются ли переменные?

Сообщение EternalHarvest »

$hook - "наш" собственный указатель на хук. Чтоб, передав его delHooks, мы могли удалить хук из "таблицы хуков ОК" (если просто присвоить $hook = "", удалится только "наш" указатель). После этого этот указатель доступен (как любая другая "наша" переменная), но бесполезен (по крайней мере для функции delHooks).

Добавлено спустя 9 минут 58 секунд:

Код: Выделить всё

sub addHook {
	# ...
	my $hookList = $hooks{$hookName} ||= new ObjectList();
	# ...
	$handle[INDEX] = $hookList->add(bless(\@entry, "Plugins::HookEntry"));
	# ...
	return bless(\@handle, 'Plugins::HookHandle');
}
HookHandle создаётся (bless) и HookEntry вносится в список (add).

Код: Выделить всё

sub delHook {
	# ...
	$hookList->remove($entry);
	# ...
	delete $handle->[HOOKNAME];
	delete $handle->[INDEX];
	# ...
}
HookEntry убирается из списка, HookHandle не удаляется (удаляются только его поля).

Т.е. после удаления хука у нас остаётся указатель на пустой объект.
Ответить