我正在研究用Visual Studio 6编写的应用程序(我知道,FML),它使用LoadLibrary
和GetProcAddress
调用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;
}
}
答案 0 :(得分:1)
你不能做那样的继承交叉编译器版本。它几乎可以工作,但例外和其他一些事情都很疯狂。