建立进程间连接

From Apache OpenOffice Wiki
Jump to: navigation, search




UNO 支持的任何语言绑定都使用本地服务管理器建立进程间连接,以创建连接到办公软件时所需的服务。有关详细信息,请参阅 专业 UNO - UNO 概念 - UNO 进程间连接 一节。以下客户机程序连接到正在运行的办公软件,并获取 com.sun.star.lang.XMultiServiceFactory,其语言为 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