<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.openoffice.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jiangc</id>
	<title>Apache OpenOffice Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.openoffice.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jiangc"/>
	<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/wiki/Special:Contributions/Jiangc"/>
	<updated>2026-08-29T02:29:57Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Penny1&amp;diff=23541</id>
		<title>Penny1</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Penny1&amp;diff=23541"/>
		<updated>2007-01-17T11:24:18Z</updated>

		<summary type="html">&lt;p&gt;Jiangc: Penny1 moved to UNO registery and Bootstrapping: revert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[UNO registery and Bootstrapping]]&lt;/div&gt;</summary>
		<author><name>Jiangc</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=UNO_registery_and_Bootstrapping&amp;diff=23540</id>
		<title>UNO registery and Bootstrapping</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=UNO_registery_and_Bootstrapping&amp;diff=23540"/>
		<updated>2007-01-17T11:24:18Z</updated>

		<summary type="html">&lt;p&gt;Jiangc: Penny1 moved to UNO registery and Bootstrapping: revert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OpenOffice.org can be extended : you can add features in OooBasic, in C++,  in Java, in Python ... These added features are called Add-Ons, components, Add-ins (discussed in chapter 13.1) and we can wonder how Openoffice.org knows something about the corresponding code ? The tools involved in this chapter are regview, regcomp, regmerge and idlc.&lt;br /&gt;
== Why UNO registry ? ==&lt;br /&gt;
It is common for programmer to develop a program and link it with a static library. If the library is a dynamic one the linking problem is let to Operating System : this OS have to know if the library is already loaded and if not where it lies. Let us be more concrete with an example.&lt;br /&gt;
&lt;br /&gt;
[[Image:LibraryExample.png]]&lt;br /&gt;
&lt;br /&gt;
In the example above in Figure above our program example.cxx calls something in mylib.so or mylib.dll (the arrow means an interaction). This is done in a very simple way if both are compiled with same language : under Linux we use a -Lmylib.so when compiling example.cxx (more [[Constructing_Components#A_very_simple_Counter|here]]). Then when you launch example binary executable when it needs what is in mylib.so it asks OS to load it. The case is a little more complicated if mylib.so is compiled with an other language than C++ : you have to learn how to pass parameters in C++ to reach the content of mylib.so. This is feasible changing a little example.cxx code.&lt;br /&gt;
But what happens if you have a binary executable program and you want to give him new features with a dynamic library ? This can be done with OpenOffice.org as already mentioned.&lt;br /&gt;
&lt;br /&gt;
What kind of problems OpenOffice has then to carry out ?&lt;br /&gt;
First of all, it is impossible for Openoffice.org to know in advance what is the name of the library (it&amp;#039;s a name you choose). Then OpenOffice.org must provide a mechanism to know its name : this is one of the goals of registry. &lt;br /&gt;
Is the name of the dynamic library enough ? No, if you imagine you can extend with two or more libraries : it is important to know that foo1 procedure/method comes from foo_lib1 library and foo2 from foo_lib2... In OpenOffice.org this is generalized saying such an interface comes from such a library ... There is a lot of other problems to resolve before making it working properly. For example a problem with the name of procedure/methods : if you write it in C or in C++ the exported names will differ. &lt;br /&gt;
And the parameters, how do you pass them ?  Imagine OOoCalc call something in mylib.so  : it is unimaginable to ask OOocalc users to write something describing how parameters are passed in their OOoCalc formula ! OpenOffice has to know how pass a parameter in your library. This is done with what is called implementation environment. This done with specifying that every dynamic library has to export :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[cpp]&lt;br /&gt;
//Listing 1  How to get the Implementation Environnement in a dynamic library&lt;br /&gt;
// C++&lt;br /&gt;
extern &amp;quot;C&amp;quot; &lt;br /&gt;
void SAL_CALL component_getImplementationEnvironment( &lt;br /&gt;
                 const sal_Char ** ppEnvTypeName, &lt;br /&gt;
                 uno_Environment ** ppEnv ) &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
The passing parameters way is fixed by extern C. This is not a decoration but an obligation. If not present a [&amp;quot;component_getImplementationEnvironment&amp;quot; could not be found] error will be thrown when you try to registry (with regmerge for instance).&lt;br /&gt;
&lt;br /&gt;
Registery uses rdb files in a binary file format. Binaries format are difficult to read by human and then a tool is provided to give the information in human readable form (see regview in further [[UNO_registery_and_Bootstrapping#The_Bootstrap |section]]).&lt;br /&gt;
&lt;br /&gt;
An advise : at first you can skip the rest of this chapter particularly if you are not interested in [[Constructing_Components|components]]. But not only components use registry : the [[UNO_automation_with_a_binary_%28executable%29|UNO/automation]]  uses registry in a different way.&lt;br /&gt;
&lt;br /&gt;
= How to use UNO registeries =&lt;br /&gt;
Documentation for registries already exist at : [http://udk.openoffice.org/common/man/tutorial/uno_registries.html uno registeries]. More information at : [http://www.ooomacros.org/dev.php ooomacros] where these tools are available : &lt;br /&gt;
* Add On Tool&lt;br /&gt;
Author: Bernard Marcelly&lt;br /&gt;
* Add On Installer&lt;br /&gt;
Author: Didier Lachièze, with code from Danny Brewer, Bernard Marcelly and Andrew Brown&lt;br /&gt;
* Basic Library Installer&lt;br /&gt;
Author: Danny Brewer, with code from Andrew Brown &amp;amp; Didier Lachièze&lt;br /&gt;
&lt;br /&gt;
In my opinion, the simpler way to registery is to modify the file unorc (under linux) or uno.ini (under Windows). You have to put the file your_library.uno.rdb in &amp;lt;OOo&amp;gt;/program directory, and editing/modifying the file &amp;lt;OOo&amp;gt;/program/unorc (under linux) adding (last line your_library.uno.rdb) : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#unorc or uno.ini&lt;br /&gt;
[Bootstrap] &lt;br /&gt;
UNO_SHARED_PACKAGES=${$SYSBINDIR/bootstraprc:BaseInstallation}/share/uno_packages &lt;br /&gt;
UNO_SHARED_PACKAGES_CACHE=$UNO_SHARED_PACKAGES/cache &lt;br /&gt;
UNO_USER_PACKAGES=${$SYSBINDIR/bootstraprc:UserInstallation}/user/uno_packages &lt;br /&gt;
UNO_USER_PACKAGES_CACHE=$UNO_USER_PACKAGES/cache &lt;br /&gt;
UNO_TYPES=$SYSBINDIR/types.rdb ?$UNO_SHARED_PACKAGES_CACHE/types.rdb ?$UNO_USER_PACKAGES_CACHE/types.rdb &lt;br /&gt;
UNO_SERVICES= ?$UNO_USER_PACKAGES_CACHE/services.rdb ?$UNO_SHARED_PACKAGES_CACHE/services.rdb $SYSBINDIR/services.rdb ?$SYSBINDIR/your_library.uno.rdb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Don&amp;#039;t forget to register the location of your_library.uno.so in the your_library.uno.rdb. This is done with regcomp tool :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
regcomp -Register -r your_library.uno.rdb -c &amp;lt;somewhere&amp;gt;/your_library.uno.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An other way is to use pkgchk or the recent unopkg for Ooo2.0x.&lt;br /&gt;
&lt;br /&gt;
= The Bootstrap =&lt;br /&gt;
&lt;br /&gt;
Bootstrapping can be defined in saying it&amp;#039;s the way to obtain a service manager. We present two different examples of bootstraping.&lt;br /&gt;
== C++ UNO bootstrapping via defaultBootstrap_InitialComponentContext() ==&lt;br /&gt;
We have have already described this bootstrap method because it concerns the classical SDK example we started with in chapter 4 (see &amp;lt;OpenOffice.org1.1_SDK&amp;gt;/examples/DevelopersGuide/ProfUNO/CppBinding). &lt;br /&gt;
We provide here two different views to explain how it works.&lt;br /&gt;
First we recall with the Figure below how we program it. It&amp;#039;s easy to see the first C++ instruction is &lt;br /&gt;
&amp;lt;code&amp;gt;[cpp]&lt;br /&gt;
//C++&lt;br /&gt;
defaultBootstrap_InitialComponentContext();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
But when drawing details from the figure we cannot infer how it works and particularly with registery. It&amp;#039;s only because Figure below is a C++/Java programmer point of view.&lt;br /&gt;
 &lt;br /&gt;
[[Image:ch4Fig1bootstrap.png]]&lt;br /&gt;
&lt;br /&gt;
To see what happens during the beginning of bootstrap, we go and see the binary in &amp;lt;OpenOffice.org1.1_SDK&amp;gt;/LINUXexample.out/bin&lt;br /&gt;
where binaries are constructed by default makefiles. We see three files :&lt;br /&gt;
* office_connect the binary executable&lt;br /&gt;
* office_connectrc : file with this content :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UNO_TYPES=$SYSBINDIR/office_connect.rdb&lt;br /&gt;
UNO_SERVICES=$SYSBINDIR/office_connect.rdb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* office_connect.rdb&lt;br /&gt;
&lt;br /&gt;
The files construction will perhaps help us to understand beter. We give again the make dependency of office_connect in Figure 1.4 which shows us how office_connect.rdb is constructed :&lt;br /&gt;
* a regmerge starting from types.rdb&lt;br /&gt;
* a regcomp to register somes classics uno.so files.&lt;br /&gt;
And now  to learn how office_connect.rdb is used we have to search in makefile how the binary is launched :&lt;br /&gt;
the line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
%.run: $(OUT_BIN)/%$(EXE_EXT)&lt;br /&gt;
	cd $(subst /,$(PS),$(OUT_BIN)) &amp;amp;&amp;amp; $(basename $@)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
is expanded as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ../../../../LINUXexample.out/bin &amp;amp;&amp;amp; office_connect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
which shows  no reference to office_connect.rdb. Then we have to probe how it works.&lt;br /&gt;
* the office_connectrc is automaticly loaded. One way to test that is to rename this file which gives as result&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make: *** [office_connect.run] Erreur 134&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* renaming only office_connect.rdb gives the same error :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make: *** [office_connect.run] Erreur 134&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* renaming office_connect.rdb as office_connect2.rdb and changing office_connectrc content, as seen below, works well.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UNO_TYPES=$SYSBINDIR/office_connect2.rdb&lt;br /&gt;
UNO_SERVICES=$SYSBINDIR/office_connect2.rdb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Conclusion&amp;#039;&amp;#039;&amp;#039; : we have found how it works : when you launch a binary it automaticaly load office_connectrc and put the file office_connect2.rdb in the good place.&lt;br /&gt;
&lt;br /&gt;
== C++ UNO bootstrapping via Bootstrap_InitialComponentContext() ==&lt;br /&gt;
The documentLoader example (see &amp;lt;OpenOffice.org1.1_SDK&amp;gt;/examples/cpp/DocumentLoader) &lt;br /&gt;
uses an other way to bootstrap. We want to describe it now. As usualy we first begin with program framework in the Figure below.&lt;br /&gt;
&lt;br /&gt;
[[Image:SecondBootstrap.png]]&lt;br /&gt;
&lt;br /&gt;
In this second case we clearly see that DocumentLoader.rdb file is involved and loaded. The only difference is with registry. We find again a rdb file but not a rc file. The consequence is the presence of a regcomp command specific to regitery the binary/executable file. &lt;br /&gt;
&lt;br /&gt;
This example will not work if OpenOffice.org is not running. In this example, the interaction between OpenOffice.org and some.bin is through the network. In other words, the programs can run on different computers. You must run OpenOffice.org in such a way it waits for an UNO connection (here only from localhost) :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Ooo&amp;gt;/program/soffice &amp;quot;-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Playing with regview =&lt;br /&gt;
&lt;br /&gt;
{{Stub}}&lt;br /&gt;
&lt;br /&gt;
= How can we registry in C++ ? =&lt;br /&gt;
It is easy to find an example with registry. As first example we can take the  [[Counter_Example|counter example]].  Why it&amp;#039;s an interesting example is only because it&amp;#039;s a two files example : counter.cxx and countermain.cxx. Counter.cxx is compiled in counter.uno.so (counter.uno.dll in windows plateforms) and a counter.uno.rdb file is created. As shown above this file is for registry. &lt;br /&gt;
&lt;br /&gt;
But what is new is, registry will be performed by the second program : countermain.cxx. And then reading this file gives us the possibility to view how this is done in C++ (see the below)&lt;br /&gt;
&amp;lt;code&amp;gt;[cpp]&lt;br /&gt;
//Listing 2 Countermain.cxx example&lt;br /&gt;
// C++&lt;br /&gt;
	....&lt;br /&gt;
&lt;br /&gt;
	// register my counter component&lt;br /&gt;
	Reference&amp;lt; XImplementationRegistration &amp;gt; xImplReg(&lt;br /&gt;
		xMgr-&amp;gt;createInstanceWithContext(OUString::createFromAscii(&lt;br /&gt;
                     &amp;quot;com.sun.star.registry.ImplementationRegistration&amp;quot;), xContext), UNO_QUERY);&lt;br /&gt;
	OSL_ENSURE( xImplReg.is(), &lt;br /&gt;
           &amp;quot;### cannot get service instance of \&amp;quot;com.sun.star.registry.ImplementationRegistration\&amp;quot;!&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	if (xImplReg.is())&lt;br /&gt;
	{&lt;br /&gt;
		xImplReg-&amp;gt;registerImplementation(&lt;br /&gt;
			OUString::createFromAscii(&amp;quot;com.sun.star.loader.SharedLibrary&amp;quot;), &lt;br /&gt;
			// loader for component&lt;br /&gt;
#ifdef UNX&lt;br /&gt;
#ifdef MACOSX&lt;br /&gt;
			OUString::createFromAscii(&amp;quot;counter.uno.dylib&amp;quot;),		// component location&lt;br /&gt;
#else&lt;br /&gt;
			OUString::createFromAscii(&amp;quot;counter.uno.so&amp;quot;),		// component location&lt;br /&gt;
#endif&lt;br /&gt;
#else&lt;br /&gt;
			OUString::createFromAscii(&amp;quot;counter.uno.dll&amp;quot;),		// component location&lt;br /&gt;
#endif&lt;br /&gt;
			Reference&amp;lt; XSimpleRegistry &amp;gt;()	 // registry omitted,&lt;br /&gt;
											 // defaulting to service manager registry used&lt;br /&gt;
			);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
An other look into countermain.cxx file is showing the bootsrap is achieved like in the DocumentLoader example and then provide the XComponentContext (xContext) and XMultiComponentFactory (xMgr) useful for registry.&lt;br /&gt;
We cannot continue without wondering what is XImplementationRegistration interface ? We gives again the corresponding IDL file :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// IDL&lt;br /&gt;
module com {  module sun {  module star {  module registry {&lt;br /&gt;
interface XImplementationRegistration: com::sun::star::uno::XInterface&lt;br /&gt;
{&lt;br /&gt;
	void registerImplementation( [in] string aImplementationLoader, &lt;br /&gt;
			 [in] string aLocation, &lt;br /&gt;
			 [in] com::sun::star::registry::XSimpleRegistry xReg ) &lt;br /&gt;
			raises( com::sun::star::registry::CannotRegisterImplementationException ); &lt;br /&gt;
	boolean revokeImplementation( [in] string aLocation, &lt;br /&gt;
			 [in] com::sun::star::registry::XSimpleRegistry xReg ); &lt;br /&gt;
	sequence&amp;lt;string&amp;gt; getImplementations( [in] string aImplementationLoader, &lt;br /&gt;
			 [in] string aLocation ); &lt;br /&gt;
	sequence&amp;lt;string&amp;gt; checkInstantiation( [in] string implementationName );&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
}; }; }; }; &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
We see new methods and among others one we want to test: getImplementations. We then add this code in the countermain.cxx&lt;br /&gt;
&amp;lt;code&amp;gt;[cpp]&lt;br /&gt;
//Listing 3 The countermain.cxx example modified&lt;br /&gt;
// C++&lt;br /&gt;
		Sequence &amp;lt;OUString&amp;gt; OUStrs =xImplReg-&amp;gt;getImplementations(&lt;br /&gt;
				OUString::createFromAscii(&amp;quot;com.sun.star.loader.SharedLibrary&amp;quot;),&lt;br /&gt;
				OUString::createFromAscii(&amp;quot;counter.uno.so&amp;quot;));&lt;br /&gt;
		for (int i=0;i&amp;lt;OUStrs.getLength();i++){&lt;br /&gt;
			OString toPrintOut = OUStringToOString(OUStrs[i],RTL_TEXTENCODING_ASCII_US);&lt;br /&gt;
			printf(&amp;quot;-- %s\n&amp;quot;,toPrintOut.pData-&amp;gt;buffer);&lt;br /&gt;
		}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
which prints out :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt; MyCounterImpl ctor called &amp;gt;&lt;br /&gt;
42,43,42&lt;br /&gt;
-- com.sun.star.comp.example.cpp.Counter&lt;br /&gt;
&amp;lt; MyCounterImpl dtor called &amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This means : if I use SharedLibrary service to load counter.uno.so, I will have the implementation name « com.sun.star.comp.example.cpp.Counter ». This information is stored in registery as Developpers Guide states. In our example :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[smoutou@p3 counter]$ regview ../../../LINUXexample.out/bin/counter.uno.rdb /IMPLEMENTATIONS &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gives the result :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Listing 5 Content of the key /IMPLEMENTATION&lt;br /&gt;
Registry &amp;quot;file:///home/smoutou/OpenOffice.org1.1_SDK/LINUXexample.out/bin/counter.uno.rdb&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
/IMPLEMENTATIONS&lt;br /&gt;
 / com.sun.star.comp.example.cpp.Counter&lt;br /&gt;
   / UNO&lt;br /&gt;
     / ACTIVATOR&lt;br /&gt;
       Value: Type = RG_VALUETYPE_STRING&lt;br /&gt;
              Size = 34&lt;br /&gt;
              Data = &amp;quot;com.sun.star.loader.SharedLibrary&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     / SERVICES&lt;br /&gt;
       / foo.Counter&lt;br /&gt;
     / LOCATION&lt;br /&gt;
       Value: Type = RG_VALUETYPE_STRING&lt;br /&gt;
              Size = 15&lt;br /&gt;
              Data = &amp;quot;counter.uno.so&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where we see the association between « com.sun.star.comp.example.cpp.Counter » name and a dynamic library (under Linux) « counter.uno.so »&lt;br /&gt;
&lt;br /&gt;
It is possible to get the service name :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Listing 6  Retrieving the Service Name&lt;br /&gt;
[smoutou@p3 counter]$ regview ../../../LINUXexample.out/bin/counter.uno.rdb /IMPLEMENTATIONS/com.sun.star.comp.example.cpp.Counter/UNO/SERVICES&lt;br /&gt;
Registry &amp;quot;file:///home/smoutou/OpenOffice.org1.1_SDK/LINUXexample.out/bin/counter.uno.rdb&amp;quot;:&lt;br /&gt;
 &lt;br /&gt;
/IMPLEMENTATIONS/com.sun.star.comp.example.cpp.Counter/UNO/SERVICES&lt;br /&gt;
 / foo.Counter&lt;br /&gt;
[smoutou@p3 counter]$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here the result is « foo.Counter ».&lt;br /&gt;
We want to retrieve the information of  Listing 6 but with C++ programming. Again you can modify the countermain.cxx example (just after the last line given in Listing 2) as shown below :&lt;br /&gt;
&amp;lt;code&amp;gt;[cpp]&lt;br /&gt;
//Listing 7 Retrieving the Service Name in C++&lt;br /&gt;
// C++&lt;br /&gt;
		Sequence &amp;lt;OUString&amp;gt; OUStrs =xImplReg-&amp;gt;getImplementations(&lt;br /&gt;
				OUString::createFromAscii(&amp;quot;com.sun.star.loader.SharedLibrary&amp;quot;),&lt;br /&gt;
				OUString::createFromAscii(&amp;quot;counter.uno.so&amp;quot;));&lt;br /&gt;
		for (int i=0;i&amp;lt;OUStrs.getLength();i++){&lt;br /&gt;
			OString toPrintOut = OUStringToOString(OUStrs[i],RTL_TEXTENCODING_ASCII_US);&lt;br /&gt;
			printf(&amp;quot;-- %s\n&amp;quot;,toPrintOut.pData-&amp;gt;buffer);&lt;br /&gt;
		}&lt;br /&gt;
		OUStrs = xImplReg-&amp;gt;checkInstantiation(&lt;br /&gt;
			OUString::createFromAscii(&amp;quot;foo.Counter&amp;quot;));&lt;br /&gt;
		printf(&amp;quot;****\n&amp;quot;);&lt;br /&gt;
		for (int i=0;i&amp;lt;OUStrs.getLength();i++){&lt;br /&gt;
			OString toPrintOut = OUStringToOString(OUStrs[i],RTL_TEXTENCODING_ASCII_US);&lt;br /&gt;
			printf(&amp;quot;** %s\n&amp;quot;,toPrintOut.pData-&amp;gt;buffer);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		Reference&amp;lt; XSimpleRegistry &amp;gt; xSimpleReg(&lt;br /&gt;
		xMgr-&amp;gt;createInstanceWithContext(OUString::createFromAscii(&amp;quot;com.sun.star.registry.SimpleRegistry&amp;quot;), xContext), UNO_QUERY);&lt;br /&gt;
		if(xSimpleReg.is())printf(&amp;quot;OK XSimpleRegistry\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		xSimpleReg-&amp;gt;open(OUString::createFromAscii(&lt;br /&gt;
       &amp;quot;file:///home/smoutou/OpenOffice.org1.1_SDK/LINUXexample.out/bin/counter.uno.rdb&amp;quot;),&lt;br /&gt;
        false,false);&lt;br /&gt;
// How to retrieve all the keys :&lt;br /&gt;
		Reference&amp;lt; XRegistryKey &amp;gt; xRegKey= xSimpleReg-&amp;gt;getRootKey();&lt;br /&gt;
		if(xRegKey.is())printf(&amp;quot;OK XRegistryKey\n&amp;quot;);&lt;br /&gt;
		OUStrs = xRegKey-&amp;gt;getKeyNames();&lt;br /&gt;
		printf(&amp;quot;++++ \n&amp;quot;);&lt;br /&gt;
		for (int i=0;i&amp;lt;OUStrs.getLength();i++){&lt;br /&gt;
			OString toPrintOut = OUStringToOString(OUStrs[i],RTL_TEXTENCODING_ASCII_US);&lt;br /&gt;
			printf(&amp;quot;+++ %s\n&amp;quot;,toPrintOut.pData-&amp;gt;buffer);&lt;br /&gt;
// prints out : /UCR /IMPLEMENTATIONS /SERVICES&lt;br /&gt;
		}&lt;br /&gt;
// How to get a sub-key&lt;br /&gt;
		xRegKey=xRegKey-&amp;gt;openKey(&lt;br /&gt;
		OUString::createFromAscii(&amp;quot;/IMPLEMENTATIONS/com.sun.star.comp.example.cpp.Counter/UNO/SERVICES&amp;quot;));&lt;br /&gt;
		OUStrs = xRegKey-&amp;gt;getKeyNames();&lt;br /&gt;
		printf(&amp;quot;$$$$ \n&amp;quot;);&lt;br /&gt;
		for (int i=0;i&amp;lt;OUStrs.getLength();i++){&lt;br /&gt;
			OString toPrintOut = OUStringToOString(OUStrs[i],RTL_TEXTENCODING_ASCII_US);&lt;br /&gt;
			printf(&amp;quot;$$$ %s\n&amp;quot;,toPrintOut.pData-&amp;gt;buffer);&lt;br /&gt;
// prints out : &lt;br /&gt;
// /IMPLEMENTATIONS/com.sun.star.comp.example.cpp.Counter/UNO/SERVICES/foo/Counter&lt;br /&gt;
&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		xRegKey-&amp;gt;closeKey();&lt;br /&gt;
		xSimpleReg-&amp;gt;close();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
which prints out&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- com.sun.star.comp.example.cpp.Counter&lt;br /&gt;
****&lt;br /&gt;
OK XSimpleRegistry&lt;br /&gt;
OK XRegistryKey&lt;br /&gt;
++++&lt;br /&gt;
+++ /UCR&lt;br /&gt;
+++ /IMPLEMENTATIONS&lt;br /&gt;
+++ /SERVICES&lt;br /&gt;
$$$$&lt;br /&gt;
$$$ /IMPLEMENTATIONS/com.sun.star.comp.example.cpp.Counter/UNO/SERVICES/foo.Counter&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Registry tools in C++ =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
I want to retrieve and decode Binary information My choice is Xinterface for a test. I wonder if it&amp;#039;s possible to retrieve all the information given by regview tool :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[smoutou@p3 counter]$ regview ../../../LINUXexample.out/bin/counter.uno.rdb /UCR/com/sun/star/uno/XInterface&lt;br /&gt;
Registry &amp;quot;file:///home/smoutou/OpenOffice.org1.1_SDK/LINUXexample.out/bin/counter.uno.rdb&amp;quot;:&lt;br /&gt;
 &lt;br /&gt;
/UCR/com/sun/star/uno/XInterface&lt;br /&gt;
 Value: Type = RG_VALUETYPE_BINARY&lt;br /&gt;
        Size = 326&lt;br /&gt;
        Data = minor version: 0&lt;br /&gt;
               major version: 1&lt;br /&gt;
               type: &amp;#039;interface&amp;#039;&lt;br /&gt;
               uik: { 0x00000000-0x0000-0x0000-0x00000000-0x00000000 }&lt;br /&gt;
               name: &amp;#039;com/sun/star/uno/XInterface&amp;#039;&lt;br /&gt;
               super name: &amp;#039;&amp;#039;&lt;br /&gt;
               Doku: &amp;quot;&amp;quot;&lt;br /&gt;
               IDL source file: &amp;quot;/home/gb/rpm/BUILD/oo_1.1rc4_src/udkapi/com/sun/star/uno/XInterface.idl&amp;quot;&lt;br /&gt;
               number of fields: 0&lt;br /&gt;
               number of methods: 3&lt;br /&gt;
               method #0: any queryInterface([in] type aType)&lt;br /&gt;
                 Doku: &amp;quot;&amp;quot;&lt;br /&gt;
               method #1: [oneway] void acquire()&lt;br /&gt;
                 Doku: &amp;quot;&amp;quot;&lt;br /&gt;
               method #2: [oneway] void release()&lt;br /&gt;
                 Doku: &amp;quot;&amp;quot;&lt;br /&gt;
               number of references: 0&lt;br /&gt;
 &lt;br /&gt;
[smoutou@p3 counter]$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== C++ Code to recover Information in a Binary Sequence ==&lt;br /&gt;
&lt;br /&gt;
See the listing below to learn how we can recover binary information in registery.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[cpp]&lt;br /&gt;
//Listing 8 Retrieving Information in a Binary Sequence&lt;br /&gt;
// C++&lt;br /&gt;
....&lt;br /&gt;
		Reference&amp;lt; XSimpleRegistry &amp;gt; xSimpleReg(&lt;br /&gt;
		xMgr-&amp;gt;createInstanceWithContext(OUString::createFromAscii(&lt;br /&gt;
                          &amp;quot;com.sun.star.registry.SimpleRegistry&amp;quot;), xContext), UNO_QUERY);&lt;br /&gt;
		OSL_ENSURE(xSimpleReg.is(),&amp;quot;NOK XSimpleRegistry\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		xSimpleReg-&amp;gt;open(OUString::createFromAscii(&lt;br /&gt;
       &amp;quot;file:///home/smoutou/OpenOffice.org1.1_SDK/LINUXexample.out/bin/counter.uno.rdb&amp;quot;),&lt;br /&gt;
        false,false);&lt;br /&gt;
// How to retrieve all the keys :&lt;br /&gt;
		Reference&amp;lt; XRegistryKey &amp;gt; xRegKey= xSimpleReg-&amp;gt;getRootKey();&lt;br /&gt;
		OSL_ENSURE(xRegKey.is(),&amp;quot;NOK XRegistryKey\n&amp;quot;);&lt;br /&gt;
// How to get a sub-key&lt;br /&gt;
		xRegKey=xRegKey-&amp;gt;openKey(&lt;br /&gt;
    		OUString::createFromAscii(&amp;quot;/UCR/com/sun/star/uno/XInterface&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
		printf(&amp;quot;//// \n&amp;quot;);&lt;br /&gt;
		OUString OUStr;&lt;br /&gt;
		OString toPrintOut; &lt;br /&gt;
		Sequence&amp;lt; sal_Int8 &amp;gt; seqByte;&lt;br /&gt;
// still a lot to do in this switch :&lt;br /&gt;
		switch (xRegKey-&amp;gt;getValueType()){&lt;br /&gt;
		  case RegistryValueType_LONG : printf(&amp;quot;long\n&amp;quot;);break;&lt;br /&gt;
		  case RegistryValueType_ASCII : printf(&amp;quot;ascii\n&amp;quot;);&lt;br /&gt;
			OUStr = xRegKey-&amp;gt;getAsciiValue();&lt;br /&gt;
			toPrintOut = OUStringToOString(OUStr,RTL_TEXTENCODING_ASCII_US);&lt;br /&gt;
			printf(&amp;quot;/// %s\n&amp;quot;,toPrintOut.pData-&amp;gt;buffer);&lt;br /&gt;
			break;&lt;br /&gt;
		  case RegistryValueType_STRING : printf(&amp;quot;string\n&amp;quot;);break;&lt;br /&gt;
		  case RegistryValueType_BINARY : printf(&amp;quot;RG_VALUETYPE_BINARY\n&amp;quot;);&lt;br /&gt;
			seqByte = xRegKey-&amp;gt;getBinaryValue();&lt;br /&gt;
			printDEBUGMODE(seqByte);&lt;br /&gt;
			break;&lt;br /&gt;
		  case RegistryValueType_LONGLIST : printf(&amp;quot;long list\n&amp;quot;);break;&lt;br /&gt;
		  case RegistryValueType_ASCIILIST : printf(&amp;quot;ascii list\n&amp;quot;);break;&lt;br /&gt;
		  case RegistryValueType_STRINGLIST : printf(&amp;quot;string list\n&amp;quot;);break;&lt;br /&gt;
		  case RegistryValueType_NOT_DEFINED : printf(&amp;quot;not defined\n&amp;quot;);break;&lt;br /&gt;
		}&lt;br /&gt;
....&lt;br /&gt;
// with the procedure&lt;br /&gt;
void printDEBUGMODE(Sequence &amp;lt; sal_Int8 &amp;gt; seqBytes){&lt;br /&gt;
  sal_Int8 Hexa[16]={&amp;#039;0&amp;#039;,&amp;#039;1&amp;#039;,&amp;#039;2&amp;#039;,&amp;#039;3&amp;#039;,&amp;#039;4&amp;#039;,&amp;#039;5&amp;#039;,&amp;#039;6&amp;#039;,&amp;#039;7&amp;#039;,&amp;#039;8&amp;#039;,&amp;#039;9&amp;#039;,&amp;#039;A&amp;#039;,&amp;#039;B&amp;#039;,&amp;#039;C&amp;#039;,&amp;#039;D&amp;#039;,&amp;#039;E&amp;#039;,&amp;#039;F&amp;#039;};&lt;br /&gt;
  int lin,col;&lt;br /&gt;
  sal_Int8 line[80];&lt;br /&gt;
  sal_Int32 len;&lt;br /&gt;
  len=seqBytes.getLength();&lt;br /&gt;
  // print the lenght in decimal and with 4 hexadecimal digits (C notation 0x....)&lt;br /&gt;
  printf(&amp;quot;length : %d Ox%X%X%X%X\n&amp;quot;,len,len&amp;gt;&amp;gt;12&amp;amp;0x000F,len&amp;gt;&amp;gt;8&amp;amp;0x000F,len&amp;gt;&amp;gt;4&amp;amp;0x000F,len&amp;amp;0x000F);&lt;br /&gt;
  len = (len/16)*16; // retire le modulo 16&lt;br /&gt;
  for(lin=0;lin&amp;lt;len;lin=lin+16){&lt;br /&gt;
      for(col=0;col&amp;lt;16;col++){&lt;br /&gt;
        line[3*col]=Hexa[seqBytes[lin+col]&amp;gt;&amp;gt;4];&lt;br /&gt;
	line[3*col+1]=Hexa[seqBytes[lin+col]&amp;amp;0x0F];&lt;br /&gt;
	line[3*col+2]=&amp;#039; &amp;#039;;&lt;br /&gt;
        if ((seqBytes[lin+col]&amp;lt;128)&amp;amp;&amp;amp;(seqBytes[lin+col]&amp;gt;20)) line[50+col]=seqBytes[lin+col];&lt;br /&gt;
        else line[50+col]=&amp;#039;.&amp;#039;;&lt;br /&gt;
      } /* end of for */&lt;br /&gt;
      line[66]=0; /* end of string...*/&lt;br /&gt;
      line[48]=&amp;#039; &amp;#039;;line[49]=&amp;#039; &amp;#039;;&lt;br /&gt;
      for (int i=0;i&amp;lt;66;i++)&lt;br /&gt;
        printf(&amp;quot;%c&amp;quot;,static_cast&amp;lt; char &amp;gt;(line[i]));&lt;br /&gt;
      printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
  } /* end of for */ &lt;br /&gt;
  // the last line is more complicated because not complete&lt;br /&gt;
  for (lin=len;lin&amp;lt;seqBytes.getLength();lin++){&lt;br /&gt;
    col=lin-len;&lt;br /&gt;
    line[3*col]=Hexa[seqBytes[lin]&amp;gt;&amp;gt;4];&lt;br /&gt;
    line[3*col+1]=Hexa[seqBytes[lin]&amp;amp;0x0F];&lt;br /&gt;
    line[3*col+2]=&amp;#039; &amp;#039;;&lt;br /&gt;
    if ((seqBytes[lin]&amp;lt;128)&amp;amp;&amp;amp;(seqBytes[lin]&amp;gt;20)) line[50+col]=seqBytes[lin];&lt;br /&gt;
    else line[50+col]=&amp;#039;.&amp;#039;;&lt;br /&gt;
  }&lt;br /&gt;
  for (++col;col&amp;lt;16;col++){&lt;br /&gt;
	line[3*col]=&amp;#039; &amp;#039;;line[3*col+1]=&amp;#039; &amp;#039;;line[3*col+2]=&amp;#039; &amp;#039;;line[50+col]=&amp;#039; &amp;#039;;&lt;br /&gt;
  }&lt;br /&gt;
  line[66]=0; /* end of string...*/&lt;br /&gt;
  line[48]=&amp;#039; &amp;#039;;line[49]=&amp;#039; &amp;#039;;&lt;br /&gt;
  for (int i=0;i&amp;lt;66;i++)&lt;br /&gt;
    printf(&amp;quot;%c&amp;quot;,static_cast&amp;lt; char &amp;gt;(line[i]));&lt;br /&gt;
  printf(&amp;quot;\n&amp;quot;); &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
A carrefully look at the listing above shows we transform the sequence of bytes in a format which recalls the old DOS debug tool.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
////&lt;br /&gt;
RG_VALUETYPE_BINARY&lt;br /&gt;
length : 326 Ox0146&lt;br /&gt;
12 34 56 78 00 00 01 46 00 00 00 01 00 06 00 00   .4Vx...F........&lt;br /&gt;
00 01 00 01 00 02 00 00 00 03 00 00 00 0B 00 00   ................&lt;br /&gt;
00 22 00 0C 63 6F 6D 2F 73 75 6E 2F 73 74 61 72   .&amp;quot;..com/sun/star&lt;br /&gt;
2F 75 6E 6F 2F 58 49 6E 74 65 72 66 61 63 65 00   /uno/XInterface.&lt;br /&gt;
00 00 00 16 00 0D 00 00 00 00 00 00 00 00 00 00   ...............&lt;br /&gt;
00 00 00 00 00 00 00 00 00 4E 00 0C 2F 68 6F 6D   .........N../hom&lt;br /&gt;
65 2F 67 62 2F 72 70 6D 2F 42 55 49 4C 44 2F 6F   e/gb/rpm/BUILD/o&lt;br /&gt;
6F 5F 31 2E 31 72 63 34 5F 73 72 63 2F 75 64 6B   o_1.1rc4_src/udk&lt;br /&gt;
61 70 69 2F 63 6F 6D 2F 73 75 6E 2F 73 74 61 72   api/com/sun/star&lt;br /&gt;
2F 75 6E 6F 2F 58 49 6E 74 65 72 66 61 63 65 2E   /uno/XInterface.&lt;br /&gt;
69 64 6C 00 00 00 00 15 00 0C 71 75 65 72 79 49   idl......queryI&lt;br /&gt;
6E 74 65 72 66 61 63 65 00 00 00 00 0A 00 0C 61   nterface.......a&lt;br /&gt;
6E 79 00 00 00 00 0B 00 0C 74 79 70 65 00 00 00   ny.......type...&lt;br /&gt;
00 0C 00 0C 61 54 79 70 65 00 00 00 00 0E 00 0C   ....aType.......&lt;br /&gt;
61 63 71 75 69 72 65 00 00 00 00 0B 00 0C 76 6F   acquire.......vo&lt;br /&gt;
69 64 00 00 00 00 0E 00 0C 72 65 6C 65 61 73 65   id.......release&lt;br /&gt;
00 00 00 00 0B 00 0C 76 6F 69 64 00 00 00 00 03   .......void.....&lt;br /&gt;
00 05 00 03 00 14 00 03 00 04 00 05 00 00 00 01   ................&lt;br /&gt;
00 06 00 01 00 07 00 00 00 0E 00 01 00 08 00 09   ................&lt;br /&gt;
00 00 00 00 00 00 00 0E 00 01 00 0A 00 0B 00 00   ................&lt;br /&gt;
00 00 00 00 00 00                                 ......&lt;br /&gt;
&lt;br /&gt;
[smoutou@p3 counter]$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We see it&amp;#039;s possible to understand how these bytes are constituted to hold the information we look for, but it will take a while to investigate further. &lt;br /&gt;
I prefere have a look into source code and find : « OOB680_m5/registry/source/reflcnst.hxx »&lt;br /&gt;
&lt;br /&gt;
== Examining the OOo source code ==&lt;br /&gt;
&lt;br /&gt;
For instance before every name we see a « 00 0C » It&amp;#039;s effecftively defined in reflcnst.hxx file as :&lt;br /&gt;
&amp;lt;code&amp;gt;[cpp]&lt;br /&gt;
//Listing 9 reflcnst.hxx File (extract)&lt;br /&gt;
// C++&lt;br /&gt;
...&lt;br /&gt;
enum CPInfoTag &lt;br /&gt;
{&lt;br /&gt;
	CP_TAG_INVALID = RT_TYPE_NONE,&lt;br /&gt;
	CP_TAG_CONST_BOOL = RT_TYPE_BOOL,&lt;br /&gt;
	CP_TAG_CONST_BYTE  = RT_TYPE_BYTE,&lt;br /&gt;
	CP_TAG_CONST_INT16 = RT_TYPE_INT16,&lt;br /&gt;
	CP_TAG_CONST_UINT16 = RT_TYPE_UINT16,&lt;br /&gt;
	CP_TAG_CONST_INT32 = RT_TYPE_INT32,&lt;br /&gt;
	CP_TAG_CONST_UINT32 = RT_TYPE_UINT32,&lt;br /&gt;
	CP_TAG_CONST_INT64 = RT_TYPE_INT64,&lt;br /&gt;
	CP_TAG_CONST_UINT64 = RT_TYPE_UINT64,&lt;br /&gt;
	CP_TAG_CONST_FLOAT = RT_TYPE_FLOAT,&lt;br /&gt;
	CP_TAG_CONST_DOUBLE = RT_TYPE_DOUBLE,&lt;br /&gt;
	CP_TAG_CONST_STRING = RT_TYPE_STRING,&lt;br /&gt;
	CP_TAG_UTF8_NAME,&lt;br /&gt;
	CP_TAG_UIK&lt;br /&gt;
};&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which learns us this is an info tag of type CP_TAG_UTF8_NAME. If we want to decode header we use this extract :&lt;br /&gt;
&amp;lt;code&amp;gt;[cpp]&lt;br /&gt;
//Listing 10 reflcnst.hxx File (extract)&lt;br /&gt;
// C++&lt;br /&gt;
extern const sal_uInt32	magic;&lt;br /&gt;
extern const sal_uInt16 minorVersion;&lt;br /&gt;
extern const sal_uInt16 majorVersion;&lt;br /&gt;
&lt;br /&gt;
#define OFFSET_MAGIC 				0&lt;br /&gt;
#define OFFSET_SIZE 				(OFFSET_MAGIC + sizeof(magic))&lt;br /&gt;
#define OFFSET_MINOR_VERSION 		(OFFSET_SIZE + sizeof(sal_uInt32))&lt;br /&gt;
#define OFFSET_MAJOR_VERSION 		(OFFSET_MINOR_VERSION + sizeof(minorVersion))&lt;br /&gt;
#define OFFSET_N_ENTRIES   	 		(OFFSET_MAJOR_VERSION + sizeof(sal_uInt16))&lt;br /&gt;
#define OFFSET_TYPE_SOURCE    		(OFFSET_N_ENTRIES + sizeof(sal_uInt16))&lt;br /&gt;
#define OFFSET_TYPE_CLASS 			(OFFSET_TYPE_SOURCE + sizeof(sal_uInt16))&lt;br /&gt;
#define OFFSET_THIS_TYPE 			(OFFSET_TYPE_CLASS + sizeof(sal_uInt16))&lt;br /&gt;
#define OFFSET_UIK 					(OFFSET_THIS_TYPE + sizeof(sal_uInt16))&lt;br /&gt;
#define OFFSET_DOKU 	   			(OFFSET_UIK + sizeof(sal_uInt16))&lt;br /&gt;
#define OFFSET_FILENAME				(OFFSET_DOKU + sizeof(sal_uInt16))&lt;br /&gt;
&lt;br /&gt;
#define OFFSET_N_SUPERTYPES			(OFFSET_FILENAME + sizeof(sal_uInt16))&lt;br /&gt;
#define OFFSET_SUPERTYPES			(OFFSET_N_SUPERTYPES + sizeof(sal_uInt16))&lt;br /&gt;
&lt;br /&gt;
#define OFFSET_CP_SIZE				(OFFSET_SUPERTYPES + sizeof(sal_uInt16))&lt;br /&gt;
#define OFFSET_CP 					(OFFSET_CP_SIZE + sizeof(sal_uInt16))&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which allows to explain our header :&lt;br /&gt;
{| border cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;550&amp;quot;&lt;br /&gt;
|- style = &amp;quot;background:#b3e2d1;text-align:center&amp;quot;&lt;br /&gt;
| |Field name||Value&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| MAGIC||12 34 56 78&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| SIZE||00 00 01 46&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| MINOR_VERSION||00 00 &lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| MAJOR_VERSION||00 01&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| N_ENTRIES||00 06&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| TYPE_SOURCE||00 00&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| TYPE_CLASS||00 01&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| THIS_TYPE||00 01&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| UIK||00 02&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| DOKU||00 00&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| FILENAME||00 03&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| N_SUPERTYPES||00 00&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| SUPERTYPES||00 0B&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| CP_SIZE||00 00&lt;br /&gt;
|- style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
| CP||00 22&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
And so on... Is it important to go further ? Not at all, it was only to « play » a little. In fact we can directly recover this information with CoreReflection service (I am not absolutely sure of that). We give in the next section an overview in Ooobasic of this service.&lt;br /&gt;
&lt;br /&gt;
= How do we see the registries in OOoBasic ? =&lt;br /&gt;
&lt;br /&gt;
OooBasic allow many things and in particular to explore registry. [http://www.oooforum.org/forum/viewtopic.php?t=8737 Danny Brewer&amp;#039;s code] shows us how to work around ? We have a look at his code :&lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
REM  *****  BASIC  *****&lt;br /&gt;
Sub Main &lt;br /&gt;
  oReflection = createUnoService( &amp;quot;com.sun.star.reflection.CoreReflection&amp;quot; ) &lt;br /&gt;
  oInfo = oReflection.forName( &amp;quot;nom.dannybrewer.test.XDannysCalcFunctions1&amp;quot; ) &lt;br /&gt;
  aMethods = oInfo.getMethods() &lt;br /&gt;
  For i = 0 To UBound( aMethods ) &lt;br /&gt;
    oMethod = aMethods( i ) &lt;br /&gt;
    Print oMethod.getName() &lt;br /&gt;
  Next &lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
We then create an idl file : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// IDL&lt;br /&gt;
#include &amp;lt;com/sun/star/uno/XInterface.idl&amp;gt;&lt;br /&gt;
#include &amp;lt;com/sun/star/lang/XInitialization.idl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
module my_module&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
interface XSomething : com::sun::star::uno::XInterface&lt;br /&gt;
{&lt;br /&gt;
	long getCount();&lt;br /&gt;
	void setCount( [in] long nCount );&lt;br /&gt;
	long increment();&lt;br /&gt;
	long decrement();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
service MyService&lt;br /&gt;
{&lt;br /&gt;
    interface XSomething;&lt;br /&gt;
};&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this IDL file, we create a rdb file and register this rdb file. Now OpenOffice.org works as if we have an add-on even if we have not written its code. We cannot launch this add-on (without its code !) but we can see it.  &lt;br /&gt;
We then modify the above Danny&amp;#039;s program : &lt;br /&gt;
&amp;lt;code&amp;gt;[oobas]&lt;br /&gt;
REM Listing 11 &lt;br /&gt;
REM  *****  BASIC  *****&lt;br /&gt;
&amp;#039;From Danny : http://www.oooforum.org/forum/viewtopic.php?t=8737 &lt;br /&gt;
Sub Main&lt;br /&gt;
  oReflection = createUnoService( &amp;quot;com.sun.star.reflection.CoreReflection&amp;quot; )&lt;br /&gt;
  oInfo = oReflection.forName( &amp;quot;my_module.XSomething&amp;quot; )&lt;br /&gt;
  aMethods = oInfo.getMethods()&lt;br /&gt;
  &amp;#039;XRay.XRay oInfo&lt;br /&gt;
  print  UBound( aMethods )+1 &amp;amp; &amp;quot; methods :  ****&amp;quot;&lt;br /&gt;
  For i = 0 To UBound( aMethods )&lt;br /&gt;
    oMethod = aMethods( i )&lt;br /&gt;
    Print oMethod.getName()&lt;br /&gt;
  Next&lt;br /&gt;
&lt;br /&gt;
  aTypes = oInfo.getTypes()&lt;br /&gt;
  print  UBound( aTypes )+1 &amp;amp; &amp;quot; types :  ****&amp;quot;&lt;br /&gt;
  For i = 0 To UBound( aTypes )&lt;br /&gt;
    oType = aTypes( i )&lt;br /&gt;
    Print &amp;quot;Types : &amp;quot; + oType.getName()&lt;br /&gt;
  Next&lt;br /&gt;
&lt;br /&gt;
  aInterfaces = oInfo.getInterfaces()&lt;br /&gt;
  print  UBound( aInterfaces )+1 &amp;amp; &amp;quot; interfaces :  ****&amp;quot;&lt;br /&gt;
  For i = 0 To UBound( aInterfaces )&lt;br /&gt;
    oInterface = aInterfaces( i )&lt;br /&gt;
    Print &amp;quot;Interfaces : &amp;quot; + oInterface.getName()&lt;br /&gt;
  Next&lt;br /&gt;
End Sub	&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
launching this modified program produces :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
7 methods : ****&lt;br /&gt;
queryInterface acquire release getCount setCount increment decrement&lt;br /&gt;
3 types : ****&lt;br /&gt;
Types : com.sun.star.reflection.XIdlClass&lt;br /&gt;
Types : com.sun.star.lang.XTypeProvider&lt;br /&gt;
Types : com.sun.star.uno.XWeak&lt;br /&gt;
0 Interfaces : ****&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We can see among others the four methods given in the IDL file.&lt;br /&gt;
To go further in C++ see [[XIDLReflection_Interface| XdlRefection Interface]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Template:Home_Page}}&lt;br /&gt;
&lt;br /&gt;
= See Also =&lt;br /&gt;
&lt;br /&gt;
*[[Tutorial_UNO_Library|UNO tutorial]]&lt;br /&gt;
*[[Tutorial_UNO_IDL|UNO IDL]]&lt;br /&gt;
* [[Uno/Article/Types%26Reflection]]&lt;br /&gt;
* [http://perso.wanadoo.fr/moutou/MyUNODoc_HTML/UNOCppAPI11.html UNO registry and bootstrapping] (Chapter 11 from UNO/C++ document) &lt;br /&gt;
* Writing a Program to Control OpenOffice.org, by Franco Pingiori — [http://www.linuxjournal.com/article/8550 Part 1] and [http://www.linuxjournal.com/article/8608 Part 2], Linux Journal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Cpp]]&lt;br /&gt;
[[Category:Uno]]&lt;br /&gt;
[[Category:Tutorial]]&lt;br /&gt;
[[Category:MacOSX]]&lt;/div&gt;</summary>
		<author><name>Jiangc</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Penny&amp;diff=23539</id>
		<title>Penny</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Penny&amp;diff=23539"/>
		<updated>2007-01-17T11:23:11Z</updated>

		<summary type="html">&lt;p&gt;Jiangc: Penny moved to Main Page: revert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Main Page]]&lt;/div&gt;</summary>
		<author><name>Jiangc</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=DomainDeveloper&amp;diff=22667</id>
		<title>DomainDeveloper</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=DomainDeveloper&amp;diff=22667"/>
		<updated>2006-12-29T06:01:02Z</updated>

		<summary type="html">&lt;p&gt;Jiangc: /* Developers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A mapping of names to OOo accounts.&lt;br /&gt;
&lt;br /&gt;
Abbrev.:&lt;br /&gt;
&lt;br /&gt;
* PL : Project Lead&lt;br /&gt;
* CL : Project Co-Lead&lt;br /&gt;
* CC : Community Council Member&lt;br /&gt;
* ESC : Engineering Steering Committee Member &lt;br /&gt;
* CVS : has write access to the OOo CVS repository&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Developers ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || CVS || @openoffice.org || [[IRC Communication]] || Notes || Affiliation&lt;br /&gt;
|-&lt;br /&gt;
|      ||     ||                 ||          ||       ||  &lt;br /&gt;
|-&lt;br /&gt;
| Volker Ahrendt|| X || va||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Kai Ahrens|| X || ka || Kai_Ahrens ||PL Graphic Applications||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Gene Anaya||   || ganaya||||||&lt;br /&gt;
|-&lt;br /&gt;
| Joost Andrae|| X || ja||ja||CL qa, release testing en-US builds and releasing builds||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Eric Bachard|| X || ericb||ericb2||Mac OSX/Linux PPC ports/CL porting||French OOo project&lt;br /&gt;
|-&lt;br /&gt;
| Kai Backman||  || kaib ||KaiB||||&lt;br /&gt;
|-&lt;br /&gt;
| Sascha Ballach|| X || sab||||||&lt;br /&gt;
|-&lt;br /&gt;
| Jayant Balraj Madavi||   || jayant_madavi||aZEN_JM||Connectivity / Database||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Jörg Barfurth|| X || jb||JoergB||Configuration Util||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Mathias Bauer|| X || mba||||PL Framework, XML||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Thorsten Behrens|| X || thb||thorsten||vcl/impress/toolkit visionary||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Benisch|| X || tbe||||Scripting framework||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Stefan Bergmann|| X || sb||||CL UDK, tools&amp;amp;amp;UCB hacker||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Andreas Bille|| X || abi||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Éric Bischoff|| X || ebischoff||ebischoff||KDE A/B driver||Bureau Cornavin&lt;br /&gt;
|-&lt;br /&gt;
| Nick Blievers|| X || nick||||IRIX||&lt;br /&gt;
|-&lt;br /&gt;
| Daniel Boelzle|| X || dbo||||UNO core/bridges/packages||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Oliver Bolte|| X || obo||||RE||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Rafaella Braconi||   || coni||||CL l10n, globalization program manager||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Michael Brauer|| X || mib||||PL XML||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Oliver Braun|| X || obr||obr||System Integration/Accessibility Hacker||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Andreas Bregas|| X || ab||||StarBasic||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Jörg Brunsmann||   || jbrunsmann||||UDK||&lt;br /&gt;
|-&lt;br /&gt;
| Jörg Budischewski||   || jbu||PyUNO hacker||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Peter Burow|| X  || pb||UI||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Aidan Butler||   || aidan||||XML filters||&lt;br /&gt;
|-&lt;br /&gt;
| Giuseppe Castagno || X || beppec56 || beppec56_  or beppe_c || PDF output&lt;br /&gt;
|-&lt;br /&gt;
| Scott Carr||   || kcarr||kcarr||Documentation||Progbits&lt;br /&gt;
|-&lt;br /&gt;
| Colin Charles||   || drbyte||bytee||Malaysian native-lang project||bytebot.net&lt;br /&gt;
|-&lt;br /&gt;
| Behrend Cornelius|| X || bc||||Wizards||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Michael Cziebalski||   || mci||||||&lt;br /&gt;
|-&lt;br /&gt;
| [[User:pdefilippis|Pierre de Filippis]]|| X || pdefilippis||aliscafo||Mac OSX native porting||&lt;br /&gt;
|-&lt;br /&gt;
| Andrew Dent|| X ||ace_dent||ace_dent||ui/custom_images||&lt;br /&gt;
|-&lt;br /&gt;
| Naren Devaiah||   || ||ndev||Performance||Intel Corporation&lt;br /&gt;
|-&lt;br /&gt;
| Nitin Dongre||   || ||nitin_BITS||||Novell, Inc.(intern)&lt;br /&gt;
|-&lt;br /&gt;
| Radek Doulik||   || radekdoulik||rodo_||Canvas hacker||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Carsten Driesner|| X || cd||||Framework||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Herbert Duerr|| X || hdu||hdu_hh||GSL||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Oliver Düsterhoff|| X || od||Writer||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Eilers|| X || bei||rfc821||EIS||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| René Engelhard|| X || rene||_rene_||config_office, Debian packager||Debian&lt;br /&gt;
|-&lt;br /&gt;
| Andre Fischer|| X || af||||Impress||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Uwe Fischer || || ufi || || || Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Ken Foskey||   || waratah||waratah||config_office/dmake man||slug.org.au&lt;br /&gt;
|-&lt;br /&gt;
| Duncan Foster||   || dfoster||||||&lt;br /&gt;
|-&lt;br /&gt;
| David Fraser||   || davidfraser||davidfraser||South African translations, multilingual builds||translate.org.za&lt;br /&gt;
|-&lt;br /&gt;
| Nils Fuhrmann||   || nf||||Localization||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Martin Gallwey|| X || mtg||marty_||XML/Writer/packaging||&lt;br /&gt;
|-&lt;br /&gt;
| Pierre-Andre Galmes || || pagalmes || pagalmes || Chart2 ||&lt;br /&gt;
|-&lt;br /&gt;
| Tony Galmiche|| X || tonygalmiche||||CL FR native-lang project||&lt;br /&gt;
|-&lt;br /&gt;
| Sunil Gandhi||   || ||tyro||||NOSIP&lt;br /&gt;
|-&lt;br /&gt;
| Sophie Gautier|| X || sgauti|| sophi ||PL FR native-lang project, CC ||.&lt;br /&gt;
|-&lt;br /&gt;
| Vladimir Glazounov|| X || vg||||RE||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Laurent Godard || X || laurentgodard || lgodard || CC, PL Extensions, Fr Native-lang Project || inDesko/Nuxeo &lt;br /&gt;
|-&lt;br /&gt;
| Jody Goldberg|| X || jodygoldberg||jody||[[Calc]] spreadsheet-ness||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Dirk Grobler|| X || dg||||Database Access||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Bettina Haberer||   || bh||||RFEOwner||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Ingrid Halama|| X || iha||||Chart||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Chris Halls|| X || haggai||haggai||Debian packager&amp;amp;amp;misc. hacker||Credativ Ltd., Debian&lt;br /&gt;
|-&lt;br /&gt;
| Gregor Hartmann|| X || gh|| Lachs ||Testtool||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Bustamam Harun||   || bustamam||||Malaysian stuff||&lt;br /&gt;
|-&lt;br /&gt;
| Kevin Hendricks|| X || khendricks||||PL Lingucomponent, PowerPC||&lt;br /&gt;
|-&lt;br /&gt;
| Con Hennessy||   || cphennessy||cph2 or cph_||hacker &amp;amp;amp; former council person||OpenApp&lt;br /&gt;
|-&lt;br /&gt;
| Ivo Hinkelmann|| X || ihi||ivo||l10n tooling/general/RE||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Eric Hoch|| X || maveric||mav_eric||Mac Porting||&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Lutz_Hoeger|Lutz Hoeger]]||   || lho||lutzh||[[User Experience]]||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Jan Holešovský|| X || kendy||kendy||KDE integration||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Martin Hollmichel|| X || mh||Ratte/Nesshof||Build Maestro, PL External, Tools, Porting, CC||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Karl Hong|| X || khong||||i18n, CJK expert||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Matthias Huetsch|| X || mhu||||Performance/strategy, PL UCB, CC, ESC||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Michael Hönnig|| X || mi||||PL API||&lt;br /&gt;
|-&lt;br /&gt;
| [[User:icobgr|Hristo Hristov]] ||   || icobgr || icobgr || PL Bulgarian native-lang project ||&lt;br /&gt;
|-&lt;br /&gt;
| Sven Jacobi|| X || sj||||Escherwizard||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Jörg Jahnke||   || jj||||Internal tooling||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Christian Jansen||   || cj ||||Menu and Toolbar?||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Ocke Janssen|| X || oj||Base||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Pavel Janík|| X || pjanik||paveljanik||PL Czech native-lang project, CL l10n, CC, ESC, l10n builds||&lt;br /&gt;
|-&lt;br /&gt;
| Berry Jia|| X || berryjia||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Pascal Junck||   || pjunck||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Peter Junge|| X || pj|| peter13j|| OOo community contact for my Chinese Employer, QA||Beijing Redflag CH2000&lt;br /&gt;
|-&lt;br /&gt;
| Christian Junker||   || Cyb||christianju||API||Trees For Life&lt;br /&gt;
|-&lt;br /&gt;
| Hirano Kazunari||   || khirano||||Japanese||&lt;br /&gt;
|-&lt;br /&gt;
| Dhananjay Keskar|| X || dkeskar ||dkeskar||Performance,Buildbot,cat-herder||Intel Corporation&lt;br /&gt;
|-&lt;br /&gt;
| Robert Kinsella||   || rkinsella||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Volodymyr Khrystynych||   || volody||||XML Filter||&lt;br /&gt;
|-&lt;br /&gt;
| Matthias Klose||   || doko||doko||Ubuntu, gcc, python packager||Canonical, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Laszlo Kovacs||   || lkovacs||||Documentation||&lt;br /&gt;
|-&lt;br /&gt;
| Martin Kretzschmar|| X || mkretzschmar||martink||Gnome / Debian||Student&lt;br /&gt;
|-&lt;br /&gt;
| Will Lachance||   || wlach||wlach_||Word Perfect File Filters||Net Integration Technologies, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Lange|| X || tl||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Lars Langhans|| X || lla||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Hans-Joachim Lankenau|| X || hjs||ause||dmake makefile expert, RE||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Németh László|| X || nemeth||||PL lingucomponent||&lt;br /&gt;
|-&lt;br /&gt;
| Jakob Lechner|| X || jakob_lechner||||Writer||Fabalabs&lt;br /&gt;
|-&lt;br /&gt;
| Michael Leibowitz||  X || mikeleib ||mikeleib||performance||Intel Corporation&lt;br /&gt;
|-&lt;br /&gt;
| Wind Li|| X || windly||||Address books||&lt;br /&gt;
|-&lt;br /&gt;
| Ping Liao||   || pliao||||||&lt;br /&gt;
|-&lt;br /&gt;
| Tor Lillqvist|| X || tml||tml_||||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Joachim Lingner|| X || jl||||Java, CLI||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Christian Lippka|| X || cl||ChristianL||Graphic Applications||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Mindy Liu||   || mindyliu||||||&lt;br /&gt;
|-&lt;br /&gt;
| Dieter Loeschky|| X || ||||Localization||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Philipp Lohmann|| X || pl||pl_hh||VCL/X11 (GSL) hacker||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Jackson Low|| X || xxjack12xx||||Porting||&lt;br /&gt;
|-&lt;br /&gt;
| Patrick Luby||   || pluby||||Mac||&lt;br /&gt;
|-&lt;br /&gt;
| Prasad Madhav || X || pmadhav || pmadhav || Buildbot || Intern@Intel &lt;br /&gt;
|-&lt;br /&gt;
| Babak Mahbod||   || bmahbod||||||&lt;br /&gt;
|-&lt;br /&gt;
| Martin Maher||   || mmaher||||Writer &amp;amp;amp; Filter chap||&lt;br /&gt;
|-&lt;br /&gt;
| Nakata Maho|| X || maho||_maho_||PL QA, FreeBSD guy||Independent&lt;br /&gt;
|-&lt;br /&gt;
| John Marmion|| X || jmarmion||||||&lt;br /&gt;
|-&lt;br /&gt;
| Andreas Martens|| X || ama||||PL Writer||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| [[User:smsm1|Shaun McDonald]] || X || smsm1 || shaunmcdonald || Mac Port, buildbot MacPort1 || Student&lt;br /&gt;
|-&lt;br /&gt;
| Caolán McNamara|| X || cmc||caolan||CL Writer &amp;amp;amp; Filter man||RedHat, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Michael Meeks|| X || mmeeks||michael_||ugly hack-er, ESC||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Frank Meies|| X || fme||||Writer||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Federico Mena-Quintero||   || federicomena||federico||perfectionist||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Michael Mi||   || mmi||||||&lt;br /&gt;
|-&lt;br /&gt;
| Björn Milcke|| X || bm||bm_||Chart||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Petr Mladek||   || pmladek||pmladek||SUSE RPMs, ooo-build releases||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Cyrille Moureaux|| X || cyrillem||Cyrille||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Mmp|Matthias Müller-Prove]]|| || mmp|| mprove|| [[User Experience]] Engineer, http://ui.openoffice.org || Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Niklas Nebel|| X || nn||||PL [[Calc]]||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Christoph Neumann|| X || cn||||API tests||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| NicelKM|| X || mnicel||nicel||||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Bertram Nolte||   || bnolte||||||&lt;br /&gt;
|-&lt;br /&gt;
| Tomas O&amp;#039;Connor||   || toconnor||||Scripting Framework||&lt;br /&gt;
|-&lt;br /&gt;
| Lars Oppermann|| X || lo||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Rodrigo Parra Novo|| X || rodarvus||rodarvus||Gnumeric/Abiword OpenDocument Format support and port to Maemo||INdT (Instituto Nokia de Tecnologia)&lt;br /&gt;
|-&lt;br /&gt;
| Edward Peterlin|| X || OPENSTEP||||Mac||&lt;br /&gt;
|-&lt;br /&gt;
| Frank Peters|| X || fpe||||Documentation||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Christof Pintaske|| X || cp||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Ron Piterman||   || rpiterman||||||&lt;br /&gt;
|-&lt;br /&gt;
| Noel Power||   || npower||noelp||VBA Interop, Scripting||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Nikolai Pretzell|| X || np || ||Autodoc, code quality||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Volker Quetschke|| X || vq||vq||W32-tcsh/bash build environment and dmake Hacker, ESC||Gravity Waves&lt;br /&gt;
|-&lt;br /&gt;
| Tino Rachui|| X || tra||tinor||GSL/Unix Hacker||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Kr|Kay Ramme]]|| X || kr||||PL UDK||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| [[User:ErAck|Eike Rathke]]|| X || er||erAck||CL [[Calc]], engine; CL i18n; stricken with number formatter||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Michael Rauch|| X || mrauch||||NetBSD||&lt;br /&gt;
|-&lt;br /&gt;
| Jens-Heiner Rechtien|| X || hr||blauwal||RE; OOo SCM (CVS, CWS tooling); Porting; Compilers||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Daniel Rentz|| X || dr||||[[Calc]] Excel filter, UI||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Florian Reuter|| X || flr||||Writer filters||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Georg Richter|| X || grichter||georg||Base, native MySQL driver||MySQL AB&lt;br /&gt;
|-&lt;br /&gt;
| G. Roderick Singleton||   || grsingleton||grsingleton||Documentation||pathtech.org&lt;br /&gt;
|-&lt;br /&gt;
| Hennes Rohling|| X || hro||||GSL &amp;amp;amp; Util||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Bibek Sahu||   || Bibek||bibek||Impress pieces||Trees For Life&lt;br /&gt;
|-&lt;br /&gt;
| Andreas Schlüns|| X || as||||Framework||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Ingo Schmidt|| X || is||||(Native) Installation||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Jsc|J&amp;amp;uuml;rgen Schmidt]]|| X || jsc||jsc||PL API, CL Extensions, UNO, SDK||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Stephan Schäfer|| X || ssa||ssa||VCL||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Frank Schönheit|| X || fs||FrankS||Database Access, Forms||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Julian Seward || || sewardj || || valgrind ||&lt;br /&gt;
|-&lt;br /&gt;
| Darragh Sherwin||   || dsherwin||darragh||E-Legislation / E-GovSystems||Propylon&lt;br /&gt;
|-&lt;br /&gt;
| Raul Siddhartha||   || rsiddhartha||raul||GTK File Selector||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Sarah Smith||   || ssmith||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rajesh Sola||   || rajeshsola||sola||misc.||NOSIP&lt;br /&gt;
|-&lt;br /&gt;
| Kai Sommerfeld|| X || kso||||manager &amp;amp;amp; hacker||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Oliver Specht|| X || os||||PL UI||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Jörg Spindler||   || jspindler||||||&lt;br /&gt;
|-&lt;br /&gt;
| Fridrich Štrba|| X || fridrich_strba||Fridrich||Word Perfect Hacker||&lt;br /&gt;
|-&lt;br /&gt;
| Ulf Stroehler||   || us||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Muthu Subramanian||   || muthusuba||muthusuba||misc.||&lt;br /&gt;
|-&lt;br /&gt;
| Louis Suárez-Potts||   || louis||louis||Community Manager||Collab.net&lt;br /&gt;
|-&lt;br /&gt;
| Claus Sørensen||   || cs||c26n,cHBs,chbs||Danish Localization and Project Management Tool(oopm)||ProFOSS&lt;br /&gt;
|-&lt;br /&gt;
| Stefan Taxhet|| X || st||stx12||CC, interpersonal problem fixer||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Armin Theissen||   || armin||||||&lt;br /&gt;
|-&lt;br /&gt;
| Caio Tiago Oliveira|| X || asrail||asrail||CL QA||Independent&lt;br /&gt;
|-&lt;br /&gt;
| Jan Tietjens||   || tietjens||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rüdiger Timm|| X || rt||||RE||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Malte Timmermann|| X || mt||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Gerhard Tonn||   || tonn||||s390||&lt;br /&gt;
|-&lt;br /&gt;
| Willem van Dorp||   || willem.vandorp||||||&lt;br /&gt;
|-&lt;br /&gt;
| Tom Verbeek|| X || tv||||Wizards, Art team||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Sander Vesik||   || svesik||||||&lt;br /&gt;
|-&lt;br /&gt;
| Daniel Vogelheim|| X || dvo||||XML||&lt;br /&gt;
|-&lt;br /&gt;
| Mikhail Voitenko|| X || mav||Framework||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Robert Vojta|| X || rvojta||rvojta||VBA Interop||&lt;br /&gt;
|-&lt;br /&gt;
| Dirk Völzke|| X || dv||||Installation||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Sparcmoz|Jim Watson]]|| X || sparcmoz|| sparcmoz||GNU Linux sparc porter||clug.org.au&lt;br /&gt;
|-&lt;br /&gt;
| Armin Weiss|| X || aw||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Dan Williams|| X || fa||dcbw||Mac et. al. hacker||RedHat, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Stephan Wunderlich|| X || sw||||||&lt;br /&gt;
|-&lt;br /&gt;
| Kohei Yoshida|| X || kohei||kohei_||[[Calc]] hacker, Calc optimization solver developer||SlickEdit, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| George Zahopoulos|| X || georgez||||||&lt;br /&gt;
|-&lt;br /&gt;
| Kurt Zenker|| X || kz||smoketester||RE||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Claudio F Filho||   || filhocf||filhocf||Brazilian portuguese Localization||BrOffice.org&lt;br /&gt;
|-&lt;br /&gt;
| Xiaoyang Yu||   || || ||Disk block reordering||Intel Corporation &lt;br /&gt;
|- &lt;br /&gt;
| Antonio Xu|| X || antoxu || antoxu || Async dialogs, PRC improvements || Intel Corporation&lt;br /&gt;
|-&lt;br /&gt;
| Rail Aliev || X  || rail || rail ||  Ru and Tr NL Co-lead || Infra-Resource &lt;br /&gt;
|-&lt;br /&gt;
| Jeremy Zheng|| X || zhiming || Jeremy || Async dialogs, PRC improvements || Intel Corporation&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Schmidtm|Matthias Schmidt]] ||   || schmidtm || schmidtm || Mac OSX Aqua Port || Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Yuri Dario ||   || ydario || Paperino || OS/2 Port || Serenity Systems intl&lt;br /&gt;
|-&lt;br /&gt;
| Wei Zhao ||   || weiz ||   || Chinese Localization  || Beijing Redflag CH2000&lt;br /&gt;
|-&lt;br /&gt;
| Liu Tao ||   || liutao ||   || PyUNO, Async dialogs|| Beijing Redflag CH2000&lt;br /&gt;
|-&lt;br /&gt;
| JiangChuang ||   || jiangc ||   || || Beijing Redflag CH2000&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== QA Engineers ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name ||CVS||@openoffice.org || [[IRC Communication]] || Interested modules || Notes || Affiliation&lt;br /&gt;
|-&lt;br /&gt;
| Stefan Baltzer||||sba||||writer||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Thorsten Bosbach||X||tbo||||framework, qa/qatesttool||QA Framework / Automation||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Oliver Craemer||X||oc||||[[Calc]]||QA Calc / Automation||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Helge Delfs||X||hde||||writer, qa/qatesttool||QA Writer / Automation||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Fredrik Haegg||X||fha||||draw, impress, qa/qatesttool||QA Graphics / Automation||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Hasan Ilter||||hi||||writer, printing, pdf export||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Michael Rüß||||mru||||writer, word im/export||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Éric Savary||||es||||writer, accessibility||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| [[User:jsi|Joerg Sievers]]||X||jsi||jogi||qa/qatesttool, [[Calc]]||Automation / QA Calc||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Joerg Skottke||X||jsk||skotti||framework, qa/qatesttool||QA Framework / Automation||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Marc Neumann||X||msc||||database, qa/qatesttool||QA Base / Automation||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Chris Lukasiak||||clu||||database||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Frank Stecher||||fst||||[[Calc]]||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Jack Warchold|||| jw||||writer, import/export filters||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Uwe Luebbers||||ul||||framework||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Thorsten Martens||||tm||||framework||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Olaf Felka|||| of||||framework, installation||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Klarhoefer||||kla||||chart||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Wolfram Garten|||| wg||||draw, impress||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Christian Guenther||||cgu||||draw, impress||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Thorsten_Ziehm|Thorsten Ziehm]]||||| thorstenziehm||||||QA lead||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are tracking pending JCAs in the document [[Pending JCAs]].&lt;br /&gt;
&lt;br /&gt;
== Related Pages ==&lt;br /&gt;
* [[User Experience Community]]&lt;br /&gt;
* A map of OOo developers around the world is available at http://www.frappr.com/ooodev, please add yourself to the map if you&amp;#039;re involved in OOo development. It&amp;#039;s just fun to see who&amp;#039;s where :-)&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Jiangc</name></author>
	</entry>
</feed>