Как MSVC6 может обрабатывать исключения из внешних функций "C"? - PullRequest
5 голосов
/ 21 сентября 2011

Я работаю над приложением, написанным в 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;
    }
}

1 Ответ

1 голос
/ 21 сентября 2011

Вы не можете делать наследование кросс-компиляторных версий подобным образом. Это почти работает, но исключения и некоторые другие вещи сходят с ума.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...