Доброго дня!
Может не сюда следовало бы поместить тему, но все же. Занялся подключением 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;
}
Вопрос такой: почему при возникновении ошибки и ее обработки оператором catch программа не переходит к следующему за catch оператору, а сразу вываливается из фунции tryConnect?
Прошу сильно не пинать, это практически моя первая программа на C++.
Сообщение отредактировал mva - 25.12.2012, 12:20