Я работаю над приложением, написанным в Visual Studio 6 (я знаю, FML), которое вызывает функции в DLL с использованием LoadLibrary
и 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;
}
}