我正在处理一个使用Visual Studio 6编写的应用程序(我知道,很遗憾),该应用程序使用
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;
}
}