Hello all, 

I've found the "strange behavior" :-)

My linux  box is too fast...

I must sleep for a second between 

"Reference< XEmbeddedObjectSupplier >"

and 

"rEmbeddedObjectSupplier->getEmbeddedObject()"


That was it...


Best regards...

Andre

Am Dienstag, 12. Februar 2008 18:07 schrieb Andre Heine:
> Hello Ariel,
>
> I'm some steps higher:-)
>
> But something strange happens...
>
> I can compile your demo but I can see the string in the XCell ("This
> works!") only two times.
> All other runs of the demo bring OOo to hang;()
>
> Without any modifications on the source!
>
> The same in my code...
>
> The code, that cause the "hanging":
>
> ------ snip
> Reference< XComponent > rEmbeddedObjectComponent =
> rEmbeddedObjectSupplier->getEmbeddedObject();
> ------
>
> I'm using OOoSDK2.0 and OOo 2.0.4 on suse linux 10.2...
> May be, my SDK or linux is broken...
>
> I got following warning from "ld":
>
> /usr/bin/ld: warning: libstdc++.so.6, needed
> by /opt/openoffice.org2.0/program/libcppu.so, may conflict with
> libstdc++.so.5
>
> I ignore that, it's generally a problem in our project. We must use
> for some libs libstdc++.so.5;-\
>
> The comic is, that the code works in some cases without any modifications.
> When OOo hangs I must kill all "soffice.bin" manually.
>
> At this time I'm very confused, but I don't surrender:-)
>
>
> Best regards
>
> Andre
>
> Am Montag, 11. Februar 2008 21:01 schrieb Andre Heine:
> > Hi Andre, Peter, *,
> >
> > Peter Eberlein escribió:
> > > Hi Andre,
> > >
> > > Andre Heine schrieb:
> > >> Ok, the next problem...
> > >>
> > >> Am Montag, 11. Februar 2008 15:37 schrieb Andre Heine:
> > >>
> > >>
> > >> Ok, I can see the SpreadsheetDocument in my writer, but how can I
> > >> access them?
> > >>
> > >> XTextContent has not any methods like getObject() or setObject()?
> > >>
> > >> How can I get the Object from XTextContent?
> > >
> > > An untested Java snippet:
> > >
> > > XTextEmbeddedObjectsSupplier xes = (XTextEmbeddedObjectsSupplier)
> > > UnoRuntime.queryInterface(XTextEmbeddedObjectsSupplier.class,
> > > document);
> > >
> > > XNameAccess xna = xes.getEmbeddedObjects();
> > >
> > > if (xna.hasByName("Objekt1")) {
> > >     XEmbeddedObjectSupplier xeo;
> > >     try {
> > >         embeddedObject
> > > =(XTextContent)UnoRuntime.queryInterface(XTextContent.class,
> > > xna.getByName("Objekt1"));
> > >         xeo = (XEmbeddedObjectSupplier)
> > > UnoRuntime.queryInterface(XEmbeddedObjectSupplier.class,
> > > embeddedObject); XComponent xComponent = xeo.getEmbeddedObject();
> > >
> > >
> > > and so on...
> >
> > there is no need to browse all the embedded object collection of the
> > document, and get it by name: you have already inserted it, so use
> > XEmbeddedObjectSupplier, as follows:
> >
> >
> > //*******************************************************************
> > #include <iostream>
> >
> > #include <cppuhelper/bootstrap.hxx>
> > #include <rtl/ustring.hxx>
> >
> > #include <com/sun/star/beans/PropertyValue.hpp>
> > #include <com/sun/star/beans/XPropertySet.hpp>
> > #include <com/sun/star/container/XIndexAccess.hpp>
> > #include <com/sun/star/document/XEmbeddedObjectSupplier.hpp>
> > #include <com/sun/star/frame/XComponentLoader.hpp>
> > #include <com/sun/star/lang/XMultiComponentFactory.hpp>
> > #include <com/sun/star/lang/XMultiServiceFactory.hpp>
> > #include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
> > #include <com/sun/star/sheet/XSpreadsheet.hpp>
> > #include <com/sun/star/sheet/XSpreadsheets.hpp>
> > #include <com/sun/star/table/XCell.hpp>
> > #include <com/sun/star/table/XCellRange.hpp>
> > #include <com/sun/star/text/ControlCharacter.hpp>
> > #include <com/sun/star/text/XText.hpp>
> > #include <com/sun/star/text/XTextContent.hpp>
> > #include <com/sun/star/text/XTextCursor.hpp>
> > #include <com/sun/star/text/XTextDocument.hpp>
> > #include <com/sun/star/uno/XComponentContext.hpp>
> >
> > using namespace std;
> > using namespace rtl;
> > using namespace com::sun::star::beans;
> > using namespace com::sun::star::container;
> > using namespace com::sun::star::document;
> > using namespace com::sun::star::frame;
> > using namespace com::sun::star::lang;
> > using namespace com::sun::star::sheet;
> > using namespace com::sun::star::table;
> > using namespace com::sun::star::text;
> > using namespace com::sun::star::uno;
> >
> >
> > int SAL_CALL main( int argc, char* argv[] ) {
> >         try {
> >                 // bootstrap the office
> >                 Reference< XComponentContext > rContext (
> >
> > ::cppu::bootstrap() );
> >
> >                 Reference< XMultiComponentFactory >     rMCF =
> > rContext->getServiceManager();
> >
> >                 // instantiate the Desktop and get a reference to
> > XComponentLoader Reference < XComponentLoader > rComponentLoader(
> >                         rMCF->createInstanceWithContext( OUString(
> > RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" ) ), rContext
> > ), UNO_QUERY_THROW );
> >
> >                 // load a new empty OOo Writer document
> >                 Reference< XTextDocument > rTextDocument (
> >                         rComponentLoader->loadComponentFromURL(
> >                         OUString( RTL_CONSTASCII_USTRINGPARAM(
> > "private:factory/swriter" ) ), OUString( RTL_CONSTASCII_USTRINGPARAM(
> > "_blank" ) ), 0,
> >                         Sequence < ::com::sun::star::beans::PropertyValue
> >
> > >() ), UNO_QUERY );
> >
> >                 // get the XText interface
> >                 Reference< XText > rText = rTextDocument->getText();
> >
> >                 // create a text cursor
> >                 Reference< XTextCursor > rTextCursor =
> > rText->createTextCursor(); rTextCursor->gotoStart( sal_False );
> >                 // insert a paragraph brake
> >                 rText->insertControlCharacter(
> >                         rTextCursor->getEnd(),
> > ControlCharacter::PARAGRAPH_BREAK, sal_False);
> >
> >                 // get the document's factory
> >                 Reference< XMultiServiceFactory > rDocFactory (
> > rTextDocument, UNO_QUERY );
> >
> >                 // create an embedded object
> >                 // get its XTextContent interface
> >                 Reference< XTextContent > rTextContent (
> >                         rDocFactory->createInstance( OUString(
> > RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.text.TextEmbeddedObject" ) )
> > ), UNO_QUERY ); // and its XPropertySet
> >                 Reference< XPropertySet > rPropertySet ( rTextContent,
> > UNO_QUERY );
> >
> >                 // the type of embedded object is determined by the
> > property named "CLSID" rPropertySet->setPropertyValue(
> >                         OUString( RTL_CONSTASCII_USTRINGPARAM( "CLSID" )
> > ), makeAny( OUString( RTL_CONSTASCII_USTRINGPARAM(
> > "47BBB4CB-CE4C-4E80-a591-42d9ae7495 0f" ) ) ) );
> >
> >                 // insert the text content
> >                 rText->insertTextContent( rTextCursor->getEnd(),
> > rTextContent, sal_False );
> >
> >                 // access the component of hte embedded object
> >                 Reference< XEmbeddedObjectSupplier >
> > rEmbeddedObjectSupplier ( rTextContent, UNO_QUERY );
> >                 Reference< XComponent > rEmbeddedObjectComponent =
> > rEmbeddedObjectSupplier->getEmbeddedObject();
> >
> >                 // this component is an XSpreadsheetDocument
> >                 Reference< XSpreadsheetDocument > rSpreadsheetDocument (
> > rEmbeddedObjectComponent, UNO_QUERY);
> >
> >                 // nevertheless, let's be sure...
> >                 if ( !rSpreadsheetDocument.is() )
> >                 {
> >                         cout << "Impossible to get the spreadsheet
> > document!" << endl; return 1;
> >                 }
> >
> >                 // get the collection of sheets in the document
> >                 Reference< XSpreadsheets > rSheets =
> > rSpreadsheetDocument->getSheets();
> >
> >                 // XIndexAccess to get an spreadsheet by index
> >                 Reference< XIndexAccess > rIndexedSheets( rSheets,
> > UNO_QUERY );
> >
> >                 // get the first sheet (index == 0)
> >                 // as XIndexAccess::getByIndex() returns an any
> >                 // we can query for a reference, like we do in Java
> >                 // Reference< XSpreadsheet > rSpreadsheet(
> > rIndexedSheets->getByIndex( sal_Int32( 0 ) ), UNO_QUERY );
> >                 // but using the operator>>= is easier
> >                 Reference< XSpreadsheet > rSpreadsheet;
> >                 rIndexedSheets->getByIndex( sal_Int32( 0 ) ) >>=
> > rSpreadsheet;
> >
> >                 // get the cell named A1
> >                 Reference< XCell > rCellA1 =
> > rSpreadsheet->getCellByPosition( sal_Int32( 0 ),  sal_Int32( 0 ) );
> >
> >                 // set a very long text
> >                 rCellA1->setFormula( OUString::createFromAscii("This
> > works!") );
> >
> >                 cout << "Press ENTER to finish the example";
> >                 cin.get();
> >         } catch ( Exception& e ) {
> >                 cerr << "caught UNO exception: "
> >                         << OUStringToOString( e.Message,
> > RTL_TEXTENCODING_ASCII_US ).getStr() << '\n';
> >                 return 1;
> >         }
> >         return 0;
> > }
> > //*******************************************************************
> >
> >
> > As row C++ code is awful and hard to read in a mail, here
> >
> >
> > http://www.ArielConstenlaHaile.com.ar/ooo/temp/TextEmbeddedObject_CalcDem
> >o. zip
> >
> > is a ready to build and run version, just place the folder
> > TextEmbeddedObject_CalcDemo inside $OO_SDK_HOME/examples/cpp/ or simply
> > run make overriding the variable PRJ in the command line as follows:
> >
> > shell> make PRJ=$OO_SDK_HOME
> >
> > where $OO_SDK_HOME is the path to the SDK root directory, for example
> >
> > shell> make PRJ=/opt/openoffice.org2.3_sdk/
> >
> > In every case you MUST run FIRST the script setsdkenv_XXX on the SDK
> > home dir. to set your environment.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to