Конференция "Основная" » Секция finalization не выполняется
 
  • DrPass © (03.07.08 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 © (03.07.08 14:54) [1]
    а ты попробуй MessageBox(0, 'Yahoo', 'Boo', MB_OK) вместо ShowMessage...
  • DrPass © (03.07.08 14:58) [2]
    А без разницы, я просто пример привел. Любой код в финализации этого модуля ведет себя аналогичным образом...
  • Anatoly Podgoretsky © (03.07.08 15:27) [3]
    > DrPass  (03.07.2008 13:54:00)  [0]

    Это признак нужно ли выполнять, видишь в последней строке xor eax,eax?
    Это как раз он для следующего вызова.
    Ты пробовал ставить там точку останова?
  • DrPass © (03.07.08 15:34) [4]

    > Anatoly Podgoretsky ©   (03.07.08 15:27) [3]

    Это завершение секции finalization. Как раз туда он и прыгает тем jnz
  • Anatoly Podgoretsky © (03.07.08 16:18) [5]
    > DrPass  (03.07.2008 15:34:04)  [4]

    Я про это и говорю и возвращает Boolean для дальнейших входов в данную секцию, изначально видимо это значение -1 все последующие будут уже 0 и inc предотвратит повторное исполнение. Я предлагаю оттрассировать.
  • DrPass © (03.07.08 16:24) [6]
    Похоже на то, но он в эту секцию входит только один раз при выгрузке пакета, и сразу же "отбивает" ее
 
Конференция "Основная" » Секция finalization не выполняется
Есть новые Нет новых   [134491   +13][b:0][p:0.001]