Коллеги, кто-нибудь сталкивался с этим феноменом?
Есть пакет, проинсталлированный в 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 мы благополучно выходим из секции финализации, ничего в ней не выполняя. Смысл этой переменной мне неизвестен.
При этом в другом модуле этого же пакета финализация работает корректно (!)
Подбросьте умную идею... я в растерянности