在加载的共享库中捕获异常

时间:2011-04-11 14:34:36

标签: c++ shared-libraries

是否正在捕获已加载的可移植共享库中引发的异常? 我注意到它适用于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 :(得分:0)

是的,这应该可以在Windows下运行。