перехват исключения в загруженной общей библиотеке - PullRequest
1 голос
/ 11 апреля 2011

Является ли перехват исключительной ситуации в загруженной разделяемой библиотеке переносимым? Я заметил, что он работает с dlfcn.h, но мне интересно, ожидается ли вообще такое поведение, например, когда вместо Windows используется LoadLibrary?

Пример кода:

main.cpp

#include <stdexcept>
#include <cstdio>
#include <dlfcn.h>

typedef void(*dummy_t)();

int main()
{
    dummy_t f;
    void* handle;
    handle = dlopen("module.so", RTLD_LAZY);
    f = (dummy_t)dlsym(handle, "modulemain");
    try
    {
        f();
    }
    catch(std::runtime_error& e)
    {
        fprintf(stderr, "caught exception: %s\n", e.what());
    }
    dlclose(handle);
}

module.cpp

#include <stdexcept>

extern "C" void modulemain()
{
    throw std::runtime_error("some terrible error occured");
}

1 Ответ

0 голосов
/ 11 апреля 2011

Да, это должно нормально работать под Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...