MSVC6如何处理来自extern“C”函数的异常?

时间:2011-09-20 20:12:25

标签: c++ visual-studio exception

我正在研究用Visual Studio 6编写的应用程序(我知道,FML),它使用LoadLibraryGetProcAddress调用DLL中的函数。较新的代码无法在VC6中编译,需要更新的编译器。 DLL有一些构造C ++对象的函数,然后VC6程序通过抽象类使用该对象。

这通常很好用,但是当GetProcAddress检索的函数抛出异常时,它会遇到问题 - 即使在DLL中捕获异常时也是如此。我注意到,当抽象类的方法抛出异常时,这不会发生。在这种情况下,事情正常。

我在这里做错了什么?如何让VC6生成代码来正确处理异常?

编辑:以下是导致程序崩溃的函数示例:

extern "C" __declspec(dllexport) Box* getBox(const char* addr)
{
    try {
        return createBox(addr);
    } catch (std::exception& ex) {
        LOG_ERROR("Open failed: " << ex.what());
        return 0;
    } catch (...) {
        LOG_ERROR("Error while opening.");
        return 0;
    }
}

1 个答案:

答案 0 :(得分:1)

你不能做那样的继承交叉编译器版本。它几乎可以工作,但例外和其他一些事情都很疯狂。