javacommons/utils/inc/dynamiclibloader.h
changeset 21 2a9601315dfc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/utils/inc/dynamiclibloader.h	Mon May 03 12:27:20 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 <string>
+#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