1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: dynload.cxx,v $
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 #include <salhelper/dynload.hxx>
32 #include <rtl/ustrbuf.hxx>
37 typedef void* (SAL_CALL
*ApiInitFunction
) (void);
39 ORealDynamicLoader::ORealDynamicLoader(ORealDynamicLoader
** ppSetToZeroInDestructor_
,
40 const rtl::OUString
& moduleName
,
41 const rtl::OUString
& initFunction
,
47 , m_strModuleName(moduleName
)
48 , m_strInitFunction(initFunction
)
49 , ppSetToZeroInDestructor( ppSetToZeroInDestructor_
)
53 ORealDynamicLoader
* ORealDynamicLoader::newInstance(ORealDynamicLoader
** ppSetToZeroInDestructor
,
54 const rtl::OUString
& moduleName
,
55 const rtl::OUString
& initFunction
)
57 ApiInitFunction initFunc
;
58 oslModule pModule
= osl_loadModule(moduleName
.pData
, SAL_LOADMODULE_DEFAULT
);
65 initFunc
= (ApiInitFunction
)osl_getFunctionSymbol(
66 pModule
, initFunction
.pData
);
70 osl_unloadModule(pModule
);
74 return(new ORealDynamicLoader(ppSetToZeroInDestructor
, moduleName
,
80 ORealDynamicLoader::~ORealDynamicLoader()
82 // set the address to zero
83 if( ppSetToZeroInDestructor
)
84 *ppSetToZeroInDestructor
= 0;
88 osl_unloadModule(m_pModule
);
93 sal_uInt32
ORealDynamicLoader::acquire()
98 sal_uInt32
ORealDynamicLoader::release()
100 sal_uInt32 nRet
= --m_refCount
;
107 void* ORealDynamicLoader::getApi() const
112 } // namespace salhelper