Форум: "Основная";
Текущий архив: 2009.09.13;
Скачать: [xml.tar.bz2];
ВнизСекция finalization не выполняется Найти похожие ветки
← →
DrPass © (2008-07-03 13:54) [0]Коллеги, кто-нибудь сталкивался с этим феноменом?
Есть пакет, проинсталлированный в IDE D2007. Есть модуль в этом пакете, секции initialization/finalization в нем. Инициализация выполняется корректно. Финализация - нет.
Пример:
initialization
finalization
ShowMessage("Boo");
end.
Генерируется вот такой код (оптимизатор выключен):
uESPPlugin.pas.292: ShowMessage("Boo");
0AAF7E70 55 push ebp
0AAF7E71 8BEC mov ebp,esp
0AAF7E73 33C0 xor eax,eax
0AAF7E75 55 push ebp
0AAF7E76 68A17EAF0A push $0aaf7ea1
0AAF7E7B 64FF30 push dword ptr fs:[eax]
0AAF7E7E 648920 mov fs:[eax],esp
0AAF7E81 FF0548B0AF0A inc dword ptr [$0aafb048]
0AAF7E87 750A jnz $0aaf7e93
0AAF7E89 B8B47EAF0A mov eax,$0aaf7eb4
0AAF7E8E E875A6FFFF call $0aaf2508
uESPPlugin.pas.293: end.
0AAF7E93 33C0 xor eax,eax
При этом после inc dword ptr [$0aafb048] флаг ZF оказывается сброшен, и по jnz мы благополучно выходим из секции финализации, ничего в ней не выполняя. Смысл этой переменной мне неизвестен.
При этом в другом модуле этого же пакета финализация работает корректно (!)
Подбросьте умную идею... я в растерянности
← →
han_malign © (2008-07-03 14:54) [1]а ты попробуй MessageBox(0, "Yahoo", "Boo", MB_OK) вместо ShowMessage...
← →
DrPass © (2008-07-03 14:58) [2]А без разницы, я просто пример привел. Любой код в финализации этого модуля ведет себя аналогичным образом...
← →
Anatoly Podgoretsky © (2008-07-03 15:27) [3]> DrPass (03.07.2008 13:54:00) [0]
Это признак нужно ли выполнять, видишь в последней строке xor eax,eax?
Это как раз он для следующего вызова.
Ты пробовал ставить там точку останова?
← →
DrPass © (2008-07-03 15:34) [4]
> Anatoly Podgoretsky © (03.07.08 15:27) [3]
Это завершение секции finalization. Как раз туда он и прыгает тем jnz
← →
Anatoly Podgoretsky © (2008-07-03 16:18) [5]> DrPass (03.07.2008 15:34:04) [4]
Я про это и говорю и возвращает Boolean для дальнейших входов в данную секцию, изначально видимо это значение -1 все последующие будут уже 0 и inc предотвратит повторное исполнение. Я предлагаю оттрассировать.
← →
DrPass © (2008-07-03 16:24) [6]Похоже на то, но он в эту секцию входит только один раз при выгрузке пакета, и сразу же "отбивает" ее
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2009.09.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c