MSVCRT._setjmp() и MSVCRT._setjmp3()
От: Digitman Россия  
Дата: 20.06.02 12:17
Оценка:
Ув. коллеги !

Может ли кто-нибудь дать мне достаточно подробные разъяснения (либо ссылку) по поводу принципиальных отличий сих ф-ций (см. тему) ?

С _setjmp проблем нет, здесь все прозрачно и понятно (даже в скупом MSDN-изложении). Декларация же и описание _setjmp3 напрочь отсутствует как в MSDN, так и в стандартных прототипах run-time ф-ций.

Ситуация такова.

1. Известно, что пара вызовов setjmp/longjmp используется для сквозных нелокальных возвратах в дереве вложенных вызовов подпрограмм при организации обработки исключений (по предопределенным соглашениям от MS). Корректность и прозрачность работы этих вызовов в паре не вызывает сомнений и проверена многократно не только в коде, сгенерированном MSVC-компилятором, но и OP-компилятором в составе Borland Delphi.

2. Известно, что InterBase-сервер в "потрохах" своего исполняемого кода, будучи изначально сотворенным и поныне "живущим" в C-среде от MS, интенсивно использует сей механизм. Это тоже как бы не вызывает сомнений. До тех пор, пока мы не заглянем в его исх.тексты или хотя бы не поинтересуемся списком импортируемых им из библиотеки MSVCRT.DLL ф-ций, среди которых наивно ожидаем обнаружить сию "сладкую парочку".

3. Какова же реальность ? А реальность рушит все идиллии :

— детальный просмотр мной зависимостей IBServer.exe (v6) от MSVCRT.DLL показывает отсутствие каких бы то ни было следов импорта ф-ции MSVCRT._setjmp(); ни по имени ни по ординалу !; вместо этого IB-сервером импортируется (статически) ф-ция MSVCRT._setjmp3();

— детальный просмотр мной исх.текстов IB6 привел к тому, что никаких следов об импорте MSVCRT._setjmp3() мной найдено не было; вместо этого все следы вели к прототипу _SETJMP в заголовочном файле SETJMP.H

— локальный перехват в АП IBServer-процесса точек входа в таки предполагаемые к импорту ф-ции MSVCRT._setjmp() и MSVCRT._setjmp3() показывает. что фактически работает пара MSVCRT._setjmp3() + MSVCRT.longjmp(), в то время как в таблице импорта модуля IBServer.exe присутствует и НИКОГДА невызываемая (точнее — невызываемая в контексте дерева интерпретации хранимой процедуры) ф-ция MSVCRT._setjmp() (та самая — отсутствующая в таблицах статического импорта модуля IBServer.exe);

Т.о., ув. коллеги, я прошу прояснить ситуацию, указав, где и в чем я "слеп" в данной ситуации )...

С благодарностью приму любые предложения, возражения, аргументы/контраргументы, кроме безапелляционно вешаемых мне ярлыков типа "извращенец" да "на.. тебе это надо"))). Уверяю : на то есть серьезные причины и необходитмость ... Для чего ? Это уже — тема отдельного "опуса"))

ICQ 91289028
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.