Creating singleton UNO components in C++

Stephan Bergmann sbergman at redhat.com
Tue Nov 1 17:27:17 UTC 2016


On 11/01/2016 04:49 PM, Dennis Francis wrote:
> I tried creating a very simple singleton UNO component which just
> gets/sets a boolean value. The code is hosted
> at https://github.com/niocs/SingletonComponent . This was created based
> on http://opengrok.libreoffice.org/xref/core/framework/source/jobs/jobexecutor.cxx#66
> . The component is packaged as an extension and unopkg was used to
> install it. The oxt file is also provided in the repo for easy testing.
>
> I tried to instantiate this singleton using macro sub named
> "TestSingleton" inside the document TestSingleton.ods provided in the
> same repo. The vba code is also provided in the file TestSingleton.vba
> for convenience. When the macro is executed, it shows a msgbox with the
> string "com.sun.star.uno.RuntimeExceptioncannot get environments".

For one, the SingletonComponent.components contained an unexpanded

   environment="@CPPU_ENV@"

attribute.  Replace "@CPPU_ENV@" with the actual environment name 
("gcc3" for GCC-based Linux/macOS/etc., "msci" for 32-bit Windows/MSVC, 
"mscx" for 64-bit Windows/MSVC; see gb_CPPU_ENV in solenv/gbuild/platform/).

For another, note that specifying the environment in the .component file 
is a LibreOffice-internal optimization (that may change again in the 
future and should not be used in extensions; see 
<https://cgit.freedesktop.org/libreoffice/core/commit/?id=b1d65c9f1535c9ef283d2a91a225359e5983f747> 
"Allow setting environment value directly in .component files"). 
Extensions must instead export a C function 
component_getImplementationEnvironment, see e.g. 
desktop/test/deployment/passive/passive_native.cxx.


More information about the LibreOffice mailing list