Доброго дня!
Может не сюда следовало бы поместить тему, но все же. Занялся подключением OpenOffice через UNO к своему приложению, написанному на Qt4. Споткнулся на непонятном поведении исключения при ошибке.
bool OOUNOReportEngine::open()
{
bool connected = tryConnect();
if (!connected) // Если сходу не удалось подключиться, то наверное сервер OpenOffice не запущен
{
ooProcess = new QProcess();
ooProcess->start("soffice \"--accept=" + ooProcessCommand + "\" --invisible");
ooProcess->waitForStarted();
connected = tryConnect(); // Попытаемся еще раз подключиться
}
if (connected)
{
...
}
else
{
TApplication::exemplar()->showError(QObject::trUtf8("Не удалось запустить") + " Open Office"); // выдадим сообщение об ошибке
}
return connected;
}
bool OOUNOReportEngine::tryConnect()
{
bool result = true;
OUString sConnectionString(OUString::createFromAscii(QString("uno:" + ooProcessCommand).toAscii()));
Reference<XComponentContext> xComponentContext(::cppu::defaultBootstrap_InitialComponentContext());
Reference<XMultiComponentFactory> xMultiComponentFactoryClient(xComponentContext->getServiceManager());
xInterface = xMultiComponentFactoryClient->createInstanceWithContext(OUString("com.sun.star.bridge.UnoUrlResolver"), xComponentContext);
Reference<XUnoUrlResolver> resolver(xInterface, UNO_QUERY);
try
{
xInterface = Reference<XInterface>(resolver->resolve(sConnectionString ), UNO_QUERY);
}
catch (Exception& e)
{
qDebug() << QString().fromAscii(OUStringToOString(e.Message, RTL_TEXTENCODING_ASCII_US).pData->buffer);
result = false;
}
// По идее, после обработки ошибки выполнение программы должно возобновиться с этого места, но вместо этого сразу происходит выход из функции
if (result)
{
// Если ошибки не было, то продолжим
...
}
return result;
}
сборка - релиз или дебаг ?
Своим вопросом Вы натолкнули меня на мысль попробовать работу в release-сборке. Там работает нормально. Похоже, что это отладчик не может корректно обрабатывать конструкции catch. Так ли это?
как раз в дебаге должно нормально показываться, а в релизе может неожиданно перескакивать согласно оптимизированному коду
сдаётся мне, у тебя перепутаны названия сборок ))
Ну судя по размерам собираемого исполняемого файла в том и другом случае, с наименованиями сборок все нормально. Ладно, я пока забил на это, Просто в будущем конструкции try...catch буду отлаживать без отладчика.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)