Генерировать исключение из функции библиотеки C, которая вынуждает выйти

Я пытаюсь обернуть функцию библиотеки C, используя C ++. Функция пытается инициализировать устройство. В случае ошибки выполнение программы прекращается (возможно, при exit(1)). Я хотел бы бросить исключение по ошибке вместо этого. Есть ли способ сделать это без редактирования источника C?

Можно ли как-то запретить вызываемой функции завершать программу?

0

Решение

устанавливать atexit обработчик, выбросить исключение из обработчика. Тьфу.

PS. Итак, исключение C ++, как указывали люди, не работает, тогда мы используем C «исключение»:

#include <cstdlib>
#include <iostream>
#include <csetjmp>

jmp_buf buf;
void foo ()
{
longjmp (buf, 1);
}

void bar () { exit(-1); }

int
main ()
{
atexit (foo);if (setjmp (buf))
{
bar ();
}
else
{
std::cout << "graceful" << std::endl;
}

return 0;
}
1

Другие решения

Если вы работаете в Unix / Linux, вы можете проверить с помощью strace что именно ваша библиотека вызывает, то вы можете переопределить вызванную функцию, используя LD_PRELOAD,

0

Не очень хорошее решение, но то, которое должно работать: раскошелиться на новый процесс и вызвать эту функцию C в дочернем процессе. В родительском процессе дождитесь завершения дочернего процесса, проверьте код ошибки, если он равен 1, что означает exit(1) был вызван, исключение.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector