【发布时间】:2011-11-21 10:00:09
【问题描述】:
我正在开发一个用 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;
}
}
【问题讨论】:
-
是否所有模块都使用相同的 msvc 运行时实例?
-
他们不是,这就是问题所在。
-
@Brian 你有捕获 DLL 中的所有处理程序吗?我们能看到一个这样的处理程序没有捕获异常的例子吗?
-
@DavidHeffernan 我在上面发布了一个示例。您会注意到有一个包罗万象的处理程序。这是否存在并不重要。
-
我认为迁移到较新的 VC++ 版本不是一种选择? :(
标签: c++ visual-studio exception