Establishing Interprocess Connections

From Apache OpenOffice Wiki
Jump to: navigation, search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.



Any language binding supported by UNO establishes interprocess connections using a local service manager to create the services necessary to connect to the office. Refer to chapter UNO Interprocess Connections for additional information. The following client program connects to a running office and retrieves the com.sun.star.lang.XMultiServiceFactory in C++:

  #include <stdio.h>
  
  #include <cppuhelper/bootstrap.hxx>
  #include <com/sun/star/bridge/XUnoUrlResolver.hpp>
  #include <com/sun/star/lang/XMultiServiceFactory.hpp>
  
  using namespace com::sun::star::uno;
  using namespace com::sun::star::lang;
  using namespace com::sun::star::bridge;
  using namespace rtl;
  using namespace cppu;
  
  int main( )
  {
      // create the initial component context
      Reference< XComponentContext > rComponentContext =
          defaultBootstrap_InitialComponentContext();
   
      // retrieve the service manager from the context
      Reference< XMultiComponentFactory > rServiceManager = 
          rComponentContext->getServiceManager();
  
      // instantiate a sample service with the service manager.
      Reference< XInterface > rInstance =
          rServiceManager->createInstanceWithContext( 
          OUString::createFromAscii("com.sun.star.bridge.UnoUrlResolver" ),
          rComponentContext );
  
      // Query for the XUnoUrlResolver interface
      Reference< XUnoUrlResolver > rResolver( rInstance, UNO_QUERY );
   
      if( ! rResolver.is() )
      {
          printf( "Error: Couldn't instantiate com.sun.star.bridge.UnoUrlResolver service\n" );
          return 1;
      }
      try
      {
          // resolve the uno-URL
          rInstance = rResolver->resolve( OUString::createFromAscii( 
              "uno:socket,host=localhost,port=2002;urp;StarOffice.ServiceManager" ) );
  
          if( ! rInstance.is() )
          {
              printf( "StarOffice.ServiceManager is not exported from remote process\n" );
              return 1;
          }
  
          // query for the simpler XMultiServiceFactory interface, sufficient for scripting
          Reference< XMultiServiceFactory > rOfficeServiceManager (rInstance, UNO_QUERY);
  
          if( ! rOfficeServiceManager.is() )
          {
              printf( "XMultiServiceFactory interface is not exported\n" );
              return 1;
          }
  
          printf( "Connected sucessfully to the office\n" );
      }
      catch( Exception &e )
      {
          OString o = OUStringToOString( e.Message, RTL_TEXTENCODING_ASCII_US );
          printf( "Error: %s\n", o.pData->buffer );
          return 1;
      }
      return 0;
  }
Content on this page is licensed under the Public Documentation License (PDL).
Personal tools
In other languages