update dev300-m58
[ooovba.git] / testshl2 / workben / dlltest / onefuncstarter.cxx
blob6a3ed7f2fce5c272245192888055ffd384ebc7dc
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: onefuncstarter.cxx,v $
10 * $Revision: 1.8 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_testshl2.hxx"
34 #include <vector>
35 #include <stdio.h>
36 #include "registerfunc.h"
37 #include <osl/module.hxx>
38 #include <osl/process.h>
39 #include <osl/file.hxx>
41 #include <rtl/string.hxx>
42 #include <rtl/ustring.hxx>
44 typedef std::vector<FktPtr> FunctionList;
45 FunctionList m_Functions;
47 extern "C" bool SAL_CALL registerFunc(FktPtr _pFunc, const char* _sFuncName)
49 printf("Function register call for func(%s) successful.\n", _sFuncName);
50 m_Functions.push_back(_pFunc);
51 // FktPtr pFunc = _pFunc;
52 // if (_pFunc)
53 // {
54 // (_pFunc)();
55 // }
57 return true;
60 void callAll()
62 for(FunctionList::const_iterator it = m_Functions.begin();
63 it != m_Functions.end();
64 ++it)
66 FktPtr pFunc = *it;
67 if (pFunc)
69 (pFunc)();
74 // void test_link_at_compiletime()
75 // {
76 // FktRegFuncPtr pRegisterFunc = &registerFunc;
77 // registerAll(pRegisterFunc);
78 // callAll();
79 // }
82 // -----------------------------------------------------------------------------
83 rtl::OUString convertPath( rtl::OString const& sysPth )
85 // PRE: String should contain a filename, relativ or absolut
86 rtl::OUString sysPath( rtl::OUString::createFromAscii( sysPth.getStr() ) );
87 rtl::OUString fURL;
88 if ( sysPth.indexOf("..") == 0 )
90 // filepath contains '..' so it's a relative path make it absolut.
91 rtl::OUString curDirPth;
92 osl_getProcessWorkingDir( &curDirPth.pData );
93 osl::FileBase::getAbsoluteFileURL( curDirPth, sysPath, fURL );
95 else
97 osl::FileBase::getFileURLFromSystemPath( sysPath, fURL );
99 return fURL;
101 // -----------------------------------------------------------------------------
103 void test_link_at_runtime()
105 ::osl::Module* pModule;
106 pModule = new ::osl::Module();
107 // create and load the module (shared library)
108 // pModule = new ::osl::Module();
109 #if (defined WNT) || (defined OS2)
110 pModule->load( convertPath( rtl::OString( "onefunc_DLL.dll" ) ) );
111 #endif
112 #ifdef UNX
113 pModule->load( convertPath( rtl::OString( "libonefunc_DLL.so" ) ) );
114 #endif
116 // get entry pointer
117 FktRegAllPtr pFunc = (FktRegAllPtr) pModule->getSymbol( rtl::OUString::createFromAscii( "registerAllTestFunction" ) );
119 if (pFunc)
121 FktRegFuncPtr pRegisterFunc = &registerFunc;
122 pFunc(pRegisterFunc);
123 callAll();
126 delete pModule;
131 // ----------------------------------- Main -----------------------------------
132 #if (defined UNX) || (defined OS2)
133 int main( int argc, char* argv[] )
134 #else
135 int _cdecl main( int argc, char* argv[] )
136 #endif
138 (void) argc;
139 (void) argv;
140 // test_link_at_compiletime();
141 test_link_at_runtime();
142 return 0;