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

Bri*_*ian 5 c++ exception visual-studio

我正在研究用Visual Studio 6编写的应用程序(我知道,FML),它使用LoadLibrary和调用DLL中的函数GetProcAddress.较新的代码无法在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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Jos*_*hua 1

您不能像这样继承交叉编译器版本。它几乎可以工作,但异常和其他一些事情会变得疯狂。