Establishing Interprocess Connections

From Apache OpenOffice Wiki
Jump to: navigation, search



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