/* * dynalink.h * * Dynamic Link Library abstraction class. * * Portable Windows Library * * Copyright (c) 1993-1998 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions are Copyright (C) 1993 Free Software Foundation, Inc. * All Rights Reserved. * * Contributor(s): ______________________________________. * * $Log: dynalink.h,v $ * Revision 1.17 2005/11/25 03:43:47 csoutheren * Fixed function argument comments to be compatible with Doxygen * * Revision 1.16 2004/07/11 07:56:35 csoutheren * Applied jumbo VxWorks patch, thanks to Eize Slange * * Revision 1.15 2004/02/22 02:38:33 ykiryanov * Removed ifndef BEOS when declaring PDynalink * * Revision 1.14 2003/09/17 05:41:58 csoutheren * Removed recursive includes * * Revision 1.13 2003/09/17 01:18:02 csoutheren * Removed recursive include file system and removed all references * to deprecated coooperative threading support * * Revision 1.12 2003/05/14 00:42:32 rjongbloed * Added missing virtual keyword to PDynaLink functions. * * Revision 1.11 2003/01/24 10:21:06 robertj * Fixed issues in RTEMS support, thanks Vladimir Nesic * * Revision 1.10 2002/10/10 04:43:43 robertj * VxWorks port, thanks Martijn Roest * * Revision 1.9 2002/09/16 01:08:59 robertj * Added #define so can select if #pragma interface/implementation is used on * platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.8 2001/06/30 06:59:06 yurik * Jac Goudsmit from Be submit these changes 6/28. Implemented by Yuri Kiryanov * * Revision 1.7 2001/05/22 12:49:32 robertj * Did some seriously wierd rewrite of platform headers to eliminate the * stupid GNU compiler warning about braces not matching. * * Revision 1.6 1999/03/09 02:59:49 robertj * Changed comments to doc++ compatible documentation. * * Revision 1.5 1999/02/16 08:07:11 robertj * MSVC 6.0 compatibility changes. * * Revision 1.4 1998/09/23 06:20:29 robertj * Added open source copyright license. * * Revision 1.3 1997/06/16 13:15:52 robertj * Added function to get a dyna-link libraries name. * * Revision 1.2 1997/06/08 04:49:20 robertj * Added DLL file extension string function. * * Revision 1.1 1995/03/14 12:44:08 robertj * Initial revision * */ #ifndef _PDYNALINK #define _PDYNALINK #if !defined(P_RTEMS) #ifdef P_USE_PRAGMA #pragma interface #endif /**A dynamic link library. This allows the loading at run time of code modules for use by an application. */ class PDynaLink : public PObject { PCLASSINFO(PDynaLink, PObject); public: /**@name Construction */ //@{ /**Create a new dyna-link, loading the specified module. The first, parameterless, form does load a library. */ PDynaLink(); /**Create a new dyna-link, loading the specified module. The first, parameterless, form does load a library. */ PDynaLink( const PString & name ///< Name of the dynamically loadable module. ); /**Destroy the dyna-link, freeing the module. */ ~PDynaLink(); //@} /**@name Load/Unload function */ //@{ /* Open a new dyna-link, loading the specified module. @return TRUE if the library was loaded. */ virtual BOOL Open( const PString & name ///< Name of the dynamically loadable module. ); /**Close the dyna-link library. */ virtual void Close(); /**Dyna-link module is loaded and may be accessed. */ virtual BOOL IsLoaded() const; /**Get the name of the loaded library. If the library is not loaded this may return an empty string. If #full# is TRUE then the full pathname of the library is returned otherwise only the name part is returned. @return String for the library name. */ virtual PString GetName( BOOL full = FALSE ///< Flag for full or short path name ) const; /**Get the extension used by this platform for dynamic link libraries. @return String for file extension. */ static PString GetExtension(); //@} /**@name DLL entry point functions */ //@{ /// Primitive pointer to a function for a dynamic link module. typedef void (*Function)(); /**Get a pointer to the function in the dynamically loadable module. @return TRUE if function was found. */ BOOL GetFunction( PINDEX index, ///< Ordinal number of the function to get. Function & func ///< Refrence to point to function to get. ); /**Get a pointer to the function in the dynamically loadable module. @return TRUE if function was found. */ BOOL GetFunction( const PString & name, ///< Name of the function to get. Function & func ///< Refrence to point to function to get. ); //@} // Include platform dependent part of class #ifdef _WIN32 #include "msos/ptlib/dynalink.h" #else #include "unix/ptlib/dynalink.h" #endif }; #endif // !defined(P_RTEMS) #endif // End Of File ///////////////////////////////////////////////////////////////