libreoffice writer + Qt

 
0
 
C++
ava
ss | 21.11.2016, 19:42
закачал libreoffice и libreoffice sdk
скомпилировал заголовки.
пытаюсь перенести пример в sdk в Qt.

возникает ошибка с ::cppu::defaultBootstrap_InitialComponentContext()

ошибка: undefined reference to `cppu::defaultBootstrap_InitialComponentContext()'

как ее исправить ? возможно надо какая-то либа ?

.pro

INCLUDEPATH += $$(OO_SDK_HOME)\include

LIBS += -L$$(OO_SDK_HOME)\lib -licppu
LIBS += -L$$(OO_SDK_HOME)\lib -licppuhelper
LIBS += -L$$(OO_SDK_HOME)\lib -lipurpenvhelper
LIBS += -L$$(OO_SDK_HOME)\lib -lisal
LIBS += -L$$(OO_SDK_HOME)\lib -lisalhelper


cpp взял из примера sdk.

#include <stdio.h>
#include <wchar.h>
#include <cppuhelper/bootstrap.hxx>
#include <osl/file.hxx>
#include <osl/process.h>
#include <rtl/process.h>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/bridge/XUnoUrlResolver.hpp>
#include <com/sun/star/frame/Desktop.hpp>
#include <com/sun/star/frame/XComponentLoader.hpp>
#include <com/sun/star/lang/XMultiComponentFactory.hpp>
#include <com/sun/star/registry/XSimpleRegistry.hpp>
#include <string.h>
using namespace com::sun::star::uno;
using namespace com::sun::star::lang;
using namespace com::sun::star::beans;
using namespace com::sun::star::bridge;
using namespace com::sun::star::frame;
using namespace com::sun::star::registry;
using ::rtl::OUString;
using ::rtl::OUStringToOString;

void MainWindow::ooWriter()
{

    OUString sConnectionString("uno:socket,host=localhost,port=2083;urp;StarOffice.ServiceManager");

    Reference< XComponentContext > xComponentContext(::cppu::defaultBootstrap_InitialComponentContext());

    /* Gets the service manager instance to be used (or null). This method has
       been added for convenience, because the service manager is a often used
       object.
    */
    Reference< XMultiComponentFactory > xMultiComponentFactoryClient(
        xComponentContext->getServiceManager() );

    /* Creates an instance of a component which supports the services specified
       by the factory.
    */
    Reference< XInterface > xInterface =
        xMultiComponentFactoryClient->createInstanceWithContext(
            "com.sun.star.bridge.UnoUrlResolver",
            xComponentContext );
//
    Reference< XUnoUrlResolver > resolver( xInterface, UNO_QUERY );

    // Resolves the component context from the office, on the uno URL given by argv[1].
    try
    {
        xInterface = Reference< XInterface >(
            resolver->resolve( sConnectionString ), UNO_QUERY );
    }
    catch ( Exception& e )
    {
        printf("Error: cannot establish a connection using '%s':\n       %s\n",
               OUStringToOString(sConnectionString, RTL_TEXTENCODING_ASCII_US).getStr(),
               OUStringToOString(e.Message, RTL_TEXTENCODING_ASCII_US).getStr());
        exit(1);
    }

    // gets the server component context as property of the office component factory
    Reference< XPropertySet > xPropSet( xInterface, UNO_QUERY );
    xPropSet->getPropertyValue("DefaultContext") >>= xComponentContext;

    // gets the service manager from the office
    Reference< XMultiComponentFactory > xMultiComponentFactoryServer(
        xComponentContext->getServiceManager() );

    /* Creates an instance of a component which supports the services specified
       by the factory. Important: using the office component context.
    */
    Reference < XDesktop2 > xComponentLoader = Desktop::create(xComponentContext);

    /* Loads a component specified by an URL into the specified new or existing
       frame.
    */
    OUString sAbsoluteDocUrl; //, sWorkingDir, sDocPathUrl, sArgDocUrl;
    sAbsoluteDocUrl = "C:/Program Files (x86)/LibreOffice 5/sdk/examples/cpp/DocumentLoader/test.odt";
    Reference< XComponent > xComponent = xComponentLoader->loadComponentFromURL(
        sAbsoluteDocUrl, OUString( "_blank" ), 0,
        Sequence < ::com::sun::star::beans::PropertyValue >() );

    // dispose the local service manager
    Reference< XComponent >::query( xMultiComponentFactoryClient )->dispose();

}
Ответы (5)
ava
baldman88 | 22.11.2016, 00:45 #
Каким компилятором пользуетесь?
ava
ss | 22.11.2016, 18:41 #
уже разобрался.

ОС: windows 7 x32
компилятор mingw32
пути были прописаны все.

проблемы была в том что когда скачиваешь libreoffice для windows он компилирован VC.

для Qt нужно пересобрать libreoffice.
ava
baldman88 | 22.11.2016, 21:08 #
Насколько помню, их SDK собран компилятором от ms. Так что нужно качать сборку Qt под этот компилятор и им же все собирать. С gcc из mingw вряд ли что-то получится (если нет из чего собрать SDK под него).
ava
mailwork2 | 23.11.2016, 10:06 #
http://rusregioninform.ru/stati-i-obzori/k...dxodit-vam.html

На сегодняшний день в Москве существуют много различных видов бань.Какую выбрать решать только вам, так как каждая из них имеет свои особенности.
Для многих людей баня, это место где можно помыться. Но таких людей мало. Большинство ценят в ней атмосферу расслабленности и наслаждения, при принятии бани.
Давайте же рассмотрим какие виды бань существуют и какая подходит именно вам:
Первая — это финская баня
Вторая — это русская баня
Третья — это японская баня
Четвертая баня — это турецкая баня
ava
ss | 24.11.2016, 18:37 #
мне нужно для mingw т.к. программа будет использоваться в linux.


Как в Qt подключить файл types.rdb  ?
без этого файла проект не связывается с libreoffice.

Пробовал как приводится на форумах сделать загрузку через процесс но такой вариант в linux не работает.
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить