Inserting a value into a XComponentContext

Stephan Bergmann sbergman at
Mon Dec 1 03:24:43 PST 2014

On 12/01/2014 12:29 AM, Chris Sherlock wrote:
> So what about the following approach:
> Reference< XComponentContext > xContext =
> ::comphelper::getProcessComponentContext();
> ::cppu::ContextEntry_Init aContextInfo[] =
> {
>      ::cppu::ContextEntry_Init("testkey", uno::Any() ),
> }
> xNewContext = ::cppu::createComponentContext(aContextInfo,
> sizeof(aContextInfo) / sizeof (aHandlerContextInfo[0]), xContext);
> Then to get access to the container, I use something like this:
> Reference< container::XNameContainer > xNameContainer( xContext,
> Is this the right approach? Will the delegate ComponentContext work?

The "philosophy" behind the UNO component context is that a component 
(i.e., service or singleton) gets one passed in during creation (cf. 
e.g. the context argument to the UNO service constructors, implicit in 
UNOIDL but explicit in the C++ and Java language bindings at least) and 
in turn uses it to obtain any other components.  This is somewhat 
blurred by the LO "convenience hack" of global 

That said, the above provides you with a functional xNewContext that you 
could "locally" use to instantiate some component with.  See my other 
reply for a way to instead modify the existing "global" component 
context (what is what you actually want to do, for whatever reason, I 

More information about the LibreOffice mailing list