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
|
||||
cppu::preInitBootstrap()
|
||||
cppu::preInitBootstrap(css::uno::Reference< css::uno::XComponentContext > const & xContext)
|
||||
{
|
||||
rtl::OUString iniUri(getUnoIniUri());
|
||||
rtl::Bootstrap bs(iniUri);
|
||||
if (bs.getHandle() == nullptr)
|
||||
throw css::uno::DeploymentException("Cannot open uno ini " + iniUri);
|
||||
if (!xContext.is())
|
||||
throw css::uno::DeploymentException("preInit: XComponentContext is not created");
|
||||
|
||||
// create the service manager
|
||||
rtl::Reference< cppuhelper::ServiceManager > aManager(new cppuhelper::ServiceManager);
|
||||
// read rdb files
|
||||
aManager->init(getBootstrapVariable(bs, "UNO_SERVICES"));
|
||||
aManager->loadAllImplementations();
|
||||
css::uno::Reference< css::uno::XInterface > xService;
|
||||
xContext->getValueByName("/singletons/com.sun.star.lang.theServiceManager") >>= xService;
|
||||
if (!xService.is())
|
||||
throw css::uno::DeploymentException("preInit: XMultiComponentFactory is not created");
|
||||
|
||||
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: */
|
||||
|
@ -439,5 +439,5 @@ GLIBCXX_3.4 {
|
||||
|
||||
PRIVATE_1.0 { # LibO 5.2
|
||||
global:
|
||||
_ZN4cppu16preInitBootstrapEv;
|
||||
_ZN4cppu16preInitBootstrapERKN3com3sun4star3uno9ReferenceINS3_17XComponentContextEEE;
|
||||
};
|
||||
|
@ -1914,7 +1914,7 @@ static int lo_initialize(LibreOfficeKit* pThis, const char* pAppPath, const char
|
||||
{
|
||||
InitVCL();
|
||||
// pre-load all component libraries.
|
||||
cppu::preInitBootstrap();
|
||||
cppu::preInitBootstrap(xContext);
|
||||
// Release Solar Mutex, lo_startmain thread should acquire it.
|
||||
Application::ReleaseSolarMutex();
|
||||
}
|
||||
|
@ -17,8 +17,16 @@ namespace cppu
|
||||
|
||||
#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
|
||||
preInitBootstrap();
|
||||
preInitBootstrap(css::uno::Reference< css::uno::XComponentContext > const & xContext);
|
||||
|
||||
#endif // LIBO_INTERNAL_ONLY
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user