diff -r f5050f1da672 -r 04becd199f91 javacommons/utils/inc/dynamiclibloader.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javacommons/utils/inc/dynamiclibloader.h Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,102 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef DYNAMICLIBLOADER_H +#define DYNAMICLIBLOADER_H + +#include +#include "javaosheaders.h" + +namespace java +{ +namespace util +{ + +//Opening dynamic library failed. +const int OPENING_LIBRARY_FAILED = -20000; + +//Getting function from dynamic library failed. +const int CANNOT_FIND_FUNCTION_FAILURE = -20001; + +class DynamicLibLoader +{ +public: + //Constructor(s) & destructor + + /** + * Creates object for loading the given library dynamically. + * @param libName The name of the lib to be loaded. + * @param closeWhenDestructed Wheter to unload the library when the + * object is destroyed. If is false, will create a memory leak. + */ + OS_IMPORT DynamicLibLoader(const char* libName); + + /** + * Creates object for loading the given library dynamically. + * @param libName The name of the lib to be loaded. + * @param closeWhenDestructed Wheter to unload the library when the + * object is destroyed. If is false, will create a memory leak. + */ + OS_IMPORT DynamicLibLoader(const char* libName, bool closeWhenDestructed); + + + OS_IMPORT virtual ~DynamicLibLoader(); + + /** + * Opens the library + * @param containsByteCode For some OS it is relevant to know if the dll + * contains rommized byte code. + * @throw LibraryLoaderException with error code OPENING_LIBRARY_FAILED + * if loading a library failed. + */ + OS_IMPORT void openLib(); + + /** + * @throw This operation does not throw exceptions. + */ + OS_IMPORT void closeLib(); + + /** + * @throw LibraryLoaderException with following error codes: + * OPENING_LIBRARY_FAILED => loading a library failed. + * CANNOT_FIND_FUNCTION_FAILURE => function cannot be found from the library. + */ + OS_IMPORT void* getFunction(const char* functionName, bool containsByteCode = false); + + /** + * @throw See exceptions from getFunction(const char*) operation. + */ + OS_IMPORT static DynamicLibLoader* loadAndGetFunction(void*& functionPtr, + const char* libName, + const char* functionName); + +private: //Methods + DynamicLibLoader(); //No default constructor allowed + DynamicLibLoader(const DynamicLibLoader&); //No copy constructor allowed + DynamicLibLoader& operator= (const DynamicLibLoader&); //No Assignment operator allowed + +private: //Members + std::string mLibName; + void* mHandle; + bool mCloseOnDestroy; +}; + +} //end namespace util +} //end namespace java + +#endif // DYNAMICLIBLOADER_H