How to install the SDK and compile the C++ examples
For both Linux and Windows the following points are very important if you want to succeed in building C++ components and snippets:
- you need to have OpenOffice.org 1.1.0 or higher installed (SDK won't run without it)
- you need to install the SDK into a directory other than the one of the OOo application
Installation under LINUX
Installation under Windows
Installing with the free MS Visual C++ Toolkit 2003
Template:Documentation/HelpNeeded I have installed DevCpp to have a make executable file. I have downloaded the free Visual C++ Toolkit 2003 here : http://www.microsoft.com/downloads/details.aspx?FamilyID=272be09d-40bb-49fd-9cb0-4bfa122fa91b&displaylang=en
and then I have installed it. (This link is broken.)
I launch first C:\openoffice\OpenOffice.org2.0_SDK\configureWindowsNT.bat which asks any questions :
set OO_SDK_HOME=C:\openoffice\OpenOffice.org2.0_SDK set OFFICE_HOME=C:\Program Files\OpenOffice.org 2.0 set OO_SDK_MAKE_HOME=C:\Dev-C++\Bin set OO_SDK_CPP_HOME=C:\Program Files\Microsoft Visual C++ Toolkit 2003\Bin set OO_SDK_JAVA_HOME=C:\Program Files\Java\jdk1.5.0_03
and I am ready to launch setsdkenv_windows.bat
I have modified the following file : C:\openoffice\OpenOffice.org2.0_SDK\examples\DevelopersGuide\ProfUNO\CppBinding\office_connect.cxx to change the port accordingly to what OOo is listening.
I have modified the makefile : added :
CC_INCLUDES = -I"C:\Program Files\Microsoft Visual C++ Toolkit 2003\include" \ -I"C:\openoffice\OpenOffice.org2.0_SDK\include"
and added libraries too :
$(OUT_BIN)/%$(EXE_EXT) : $(SAMPLE_OBJ_OUT)/%.$(OBJ_EXT) -$(MKDIR) $(subst /,$(PS),$(@D)) -$(MKDIR) $(subst /,$(PS),$(SAMPLE_GEN_OUT)) ifeq "$(OS)" "WIN" $(LINK) $(EXE_LINK_FLAGS) /OUT:$@ /MAP:$(SAMPLE_GEN_OUT)/$(subst $(EXE_EXT),.map,$(@F)) \ $< $(CPPUHELPERLIB) $(CPPULIB) $(SALHELPERLIB) $(SALLIB) $(STLPORTLIB)\ "C:\Program Files\Microsoft Visual C++ Toolkit 2003\lib\libcp.lib" \ "C:\Program Files\Microsoft Visual C++ Toolkit 2003\lib\libc.lib" \ "C:\Program Files\Microsoft Visual C++ Toolkit 2003\lib\oldnames.lib" \ "C:\Program Files\Microsoft Visual C++ Toolkit 2003\lib\kernel32.lib" else $(LINK) $(EXE_LINK_FLAGS) $(LINK_LIBS) -o $@ $< \ $(CPPUHELPERLIB) $(CPPULIB) $(SALHELPERLIB) $(SALLIB) $(STLPORTLIB) $(STDC++LIB) endif
I suppose there is a more straightforward way to add these libraries with adding the corresponding include path but I am unable to do that with VC++.
I find a solution of the previous problem three weeks later. My problem comes in fact from a bug in setsdkenv_windows.bat. A little correction in the file setsdkenv_windows.bat makes it possible to avoid the makefile modifications : Put :
REM Set environment for C++ compiler tools, if necessary. if defined OO_SDK_CPP_HOME call "C:\Program Files\Microsoft Visual C++ Toolkit 2003\VCVARS32.bat"
instead of :
REM Set environment for C++ compiler tools, if necessary. if defined OO_SDK_CPP_HOME call "%OO_SDK_CPP_HOME%\VCVARS32.bat"
could work too (but not checked). You can also move vcvars32.bat in %OO_SDK_CPP_HOME% ("C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin" for me).
Other Windows Installations descriptions
1.Download and install OpenOffice.
2.Download and install OpenOffice SDK
3.Create a new folder inludecpp in <oo_sdk_path>
4.Open Dos console change directory to <oo_sdk_path>\windows\bin
4.1 run cppumaker with followig paramerers
cppumaker -BUCR -O <oo_sdk_path>\includecpp <office_programm_dir>\types.rdb
or better with
cppumaker -Gc -BUCR -O<includes_path> <ooffice_path>\URE\misc\types.rdb <ooffice_path>\Basis\program\offapi.rdb
in recent versions.
(Attention: If you recieve a init error, copy types.rdb into the <oo_sdk_path>\windows\bin folder!) After that all hpp and hdl files should be created in <oo_sdk_path>\includecpp
5.Open Visual Studio and create a new Win32 Console Application. Applay the following changes to your project.
5.1. Tools ->Options->Projects->VC++ Directories -> Include Files Add \include directory and <oo_sdk_path>\includecpp
5.2. Tools ->Options->Projects->VC++ Directories -> Library files Add <oo_sdk_path>\windows\lib directory
5.3. Tools ->Options->Projects->VC++ Directories -> Executable files Add <office_programm_dir>\program directory (location where you installed the version of the OpenOffice)
5.4 Open the Project Settings
5.4.1 Change Configuration to all All Configurations (the combobox in the left corner of the window)
5.4.2 Add the additional libraries
Properties->Linker->ComandLine in the Additional Options tab the library files isal.lib icppu.lib icppuhelper.lib isal.lib isalhelper.lib ireg.lib irmcxt.lib stlport_vc71.lib
6.(example) Add the DocumentLoader.cxx from the cpp examples of the sdk and compile. The source should compile without errors.
INFO : If you got the following error have a look at the solution 2 postings above! Up to now, with the steps above i got the following error, when i run the DocumentLoader example. The error is thrown, when the prog execution reach the following line:
Reference< XSimpleRegistry > xSimpleRegistry( ::cppu::createSimpleRegistry() );
with error shown below :
Error: Window title: Microsoft Visual C++ Debug Library Headline: Debug Error Msg: This application has requested the Runtime to terminate it in an usual way. Please contact the support team for more information.
If somebody has experience with this kind of error it will be nice if he could post a solution. So that here is a complete little guide for OpenOffice with VC++ .NET
François has improved the complete procedure with remarks : Following all the steps I (_francois_) encountered two problems
- first in point 4.4.2
But there I guess it's because the procedure was meant for SDK 2 and I'm using SDK 1.1 The stlport_vc71.lib which you must include is distributed with the SDK 2 in the SDK 1.1 stlport_vc7.lib you just need to include the stlport_vc7.lib instead of stlport_vc71.lib
- second problem after successfuly compiling the DocumentLoader in Visual Studio I was getting the following error
Window title: Microsoft Visual C++ Debug Libary Headline: Debug Error Msg: This application has requested the Runtime to terminate it in an usual way. Please contact the support team for more information.
After going on debug in the visual studio I found the following line was responsible
xSimpleRegistry->open( OUString( RTL_CONSTASCII_USTRINGPARAM("DocumentLoader.rdb") ), sal_True, sal_False );
The DocumentLoader.rdb was missing ... I noticed that if I compiled the DocumentLoader exemples from command line with the makefile provided with the exemple a DocumentLoader.rdb was generated. I had a look at the Makefile I isolated the lines which seemed to generate the DocumentLoader.rdb into my Debug folder (or wherever your set your DocumentLoader.exe to be put by Visual Studio) in my Visual Studio project...
regmerge c:\travail\DocumentLoader\debug\DocumentLoader.rdb / "C:\ooo\office\program\types.rdb" regcomp -register -r c:\travail\DocumentLoader\debug\DocumentLoader.rdb -c connector.uno.dll regcomp -register -r c:\travail\DocumentLoader\debug\DocumentLoader.rdb -c remotebridge.uno.dll regcomp -register -r c:\travail\DocumentLoader\debug\DocumentLoader.rdb -c bridgefac.uno.dll regcomp -register -r c:\travail\DocumentLoader\debug\DocumentLoader.rdb -c uuresolver.uno.dll
I launched all the above lines in the prompt shell and it worked I had my DocumentLoader.rdb in my Debug folder
I launched my exe file and it worked, great...
Now I guess I still need to figure out which *.uno.dll needs to be included for which functions used in the programm, but still it's a good start. If anyone has any information about that (It may actualy be documented somewhere) don't hesitate)
The Development Tools of the SDK
There are several development tools provided with the SDK : idlc, cppumaker, javamaker, rdbmaker, pkgchk, regcomp, regmerge, regview, xml2cmp, uno, and autodoc. You can find a short documentation on these tools at <OOo_SDK>/docs/tools.html and also in Developer's Guide.
One Cpp Example
If you want to check the Cpp examples, you have to launch first (as mentioned before) Template:Documentation/Linux in your shell and then Template:Documentation/Linux For Openoffice.org 2.x, run instead: Template:Documentation/Linux Now Openoffice.org is listening on UNO connections through the network (here from localhost only). We are ready to compile our first example and to check if it works correctly. For that we go in <OpenOffice.org1.1_SDK>/examples/cpp/DocumentLoader directory.
will compile the example, and
will launch the example. This example only load a Ooowriter's file (test.sxw) provided with the SDK.
Bear in mind the easier way to construct the examples of the SDK is to use the makefiles provided. When you are a beginner with the SDK you always underestimate important steps : for example the registry step discussed later. I estimate to have understand something when I am able to construct it starting with nothing (but skills). In the case of SDK this will take me a long time (and probably will not be finished). Then I can give you an advice : if you want to start a project, begin with modifying an example of the SDK.
Other SDK's examples are discussed later, but you can have a look to :