Может ли кто-нибудь дать мне достаточно подробные разъяснения (либо ссылку) по поводу принципиальных отличий сих ф-ций (см. тему) ?
С _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);
Т.о., ув. коллеги, я прошу прояснить ситуацию, указав, где и в чем я "слеп" в данной ситуации )...
С благодарностью приму любые предложения, возражения, аргументы/контраргументы, кроме безапелляционно вешаемых мне ярлыков типа "извращенец" да "на.. тебе это надо"))). Уверяю : на то есть серьезные причины и необходитмость ... Для чего ? Это уже — тема отдельного "опуса"))