Re-work cppu::preInitBootstrap()
In the preinit stage, the preInitBootstrap is called to load implementations for each service registered by the service manager. All service requests are: initial Component Context and the process service factory is set. However, some services require that VCL is properly initialized. Change-Id: Ib116e3da172b860f2df4d672f6181b5de0b7e6b2
This commit is contained in:
parent
6b41b89cc5
commit
8d7f29a933
@ -109,18 +109,25 @@ cppu::defaultBootstrap_InitialComponentContext()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cppu::preInitBootstrap()
|
cppu::preInitBootstrap(css::uno::Reference< css::uno::XComponentContext > const & xContext)
|
||||||
{
|
{
|
||||||
rtl::OUString iniUri(getUnoIniUri());
|
if (!xContext.is())
|
||||||
rtl::Bootstrap bs(iniUri);
|
throw css::uno::DeploymentException("preInit: XComponentContext is not created");
|
||||||
if (bs.getHandle() == nullptr)
|
|
||||||
throw css::uno::DeploymentException("Cannot open uno ini " + iniUri);
|
|
||||||
|
|
||||||
// create the service manager
|
css::uno::Reference< css::uno::XInterface > xService;
|
||||||
rtl::Reference< cppuhelper::ServiceManager > aManager(new cppuhelper::ServiceManager);
|
xContext->getValueByName("/singletons/com.sun.star.lang.theServiceManager") >>= xService;
|
||||||
// read rdb files
|
if (!xService.is())
|
||||||
aManager->init(getBootstrapVariable(bs, "UNO_SERVICES"));
|
throw css::uno::DeploymentException("preInit: XMultiComponentFactory is not created");
|
||||||
aManager->loadAllImplementations();
|
|
||||||
|
rtl::Reference<cppuhelper::ServiceManager> aService(reinterpret_cast<cppuhelper::ServiceManager*>(xService.get()));
|
||||||
|
|
||||||
|
// pre-requisites:
|
||||||
|
// In order to load implementations and invoke
|
||||||
|
// component factory it is required:
|
||||||
|
// 1) defaultBootstrap_InitialComponentContext()
|
||||||
|
// 2) comphelper::setProcessServiceFactory(xSFactory);
|
||||||
|
// 3) InitVCL()
|
||||||
|
aService->loadAllImplementations();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||||
|
@ -439,5 +439,5 @@ GLIBCXX_3.4 {
|
|||||||
|
|
||||||
PRIVATE_1.0 { # LibO 5.2
|
PRIVATE_1.0 { # LibO 5.2
|
||||||
global:
|
global:
|
||||||
_ZN4cppu16preInitBootstrapEv;
|
_ZN4cppu16preInitBootstrapERKN3com3sun4star3uno9ReferenceINS3_17XComponentContextEEE;
|
||||||
};
|
};
|
||||||
|
@ -1914,7 +1914,7 @@ static int lo_initialize(LibreOfficeKit* pThis, const char* pAppPath, const char
|
|||||||
{
|
{
|
||||||
InitVCL();
|
InitVCL();
|
||||||
// pre-load all component libraries.
|
// pre-load all component libraries.
|
||||||
cppu::preInitBootstrap();
|
cppu::preInitBootstrap(xContext);
|
||||||
// Release Solar Mutex, lo_startmain thread should acquire it.
|
// Release Solar Mutex, lo_startmain thread should acquire it.
|
||||||
Application::ReleaseSolarMutex();
|
Application::ReleaseSolarMutex();
|
||||||
}
|
}
|
||||||
|
@ -17,8 +17,16 @@ namespace cppu
|
|||||||
|
|
||||||
#if defined LIBO_INTERNAL_ONLY
|
#if defined LIBO_INTERNAL_ONLY
|
||||||
|
|
||||||
|
/** Preload all shared library components with service manager upon
|
||||||
|
information from bootstrap variables.
|
||||||
|
|
||||||
|
This function tries to find its parameters via these bootstrap variables:
|
||||||
|
|
||||||
|
- UNO_SERVICES -- a space separated list of file urls of service rdbs
|
||||||
|
|
||||||
|
*/
|
||||||
CPPUHELPER_DLLPUBLIC void SAL_CALL
|
CPPUHELPER_DLLPUBLIC void SAL_CALL
|
||||||
preInitBootstrap();
|
preInitBootstrap(css::uno::Reference< css::uno::XComponentContext > const & xContext);
|
||||||
|
|
||||||
#endif // LIBO_INTERNAL_ONLY
|
#endif // LIBO_INTERNAL_ONLY
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user