compilation fixes and some cleanup
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10590 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
181b406894
commit
33a8563e66
@ -1,11 +1,11 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: dynlib.cpp
|
||||
// Purpose: Dynamic library management
|
||||
// Author: Guilhem Lavaux
|
||||
// Name: wx/dynlib.h
|
||||
// Purpose: Dynamic library loading classes
|
||||
// Author: Guilhem Lavaux, Vadim Zeitlin, Vaclav Slavik
|
||||
// Modified by:
|
||||
// Created: 20/07/98
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) Guilhem Lavaux
|
||||
// Copyright: (c) 1998 Guilhem Lavaux
|
||||
// Licence: wxWindows license
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@ -63,36 +63,51 @@
|
||||
#endif
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxDllLoader
|
||||
// wxDllLoader: low level DLL functions, use wxDynamicLibrary in your code
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
/** wxDllLoader is a class providing an interface similar to unix's
|
||||
dlopen(). It is used by the wxLibrary framework and manages the
|
||||
actual loading of DLLs and the resolving of symbols in them.
|
||||
There are no instances of this class, it simply serves as a
|
||||
namespace for its static member functions.
|
||||
/*
|
||||
wxDllLoader is a class providing an interface similar to unix's dlopen().
|
||||
It is used by wxDynamicLibrary wxLibrary and manages the actual loading of
|
||||
DLLs and the resolving of symbols in them. There are no instances of this
|
||||
class, it simply serves as a namespace for its static member functions.
|
||||
*/
|
||||
class WXDLLEXPORT wxDllLoader
|
||||
{
|
||||
public:
|
||||
/** This function loads a shared library into memory, with libname
|
||||
being the basename of the library, without the filename
|
||||
extension. No initialisation of the library will be done.
|
||||
@param libname Name of the shared object to load.
|
||||
@param success Must point to a bool variable which will be set to TRUE or FALSE.
|
||||
@return A handle to the loaded DLL. Use success parameter to test if it is valid.
|
||||
/*
|
||||
This function loads the shared library libname into memory.
|
||||
|
||||
libname may be either the full path to the file or just the filename in
|
||||
which case the library is searched for in all standard locations
|
||||
(use GetDllExt() to construct the filename)
|
||||
|
||||
if success pointer is not NULL, it will be filled with TRUE if everything
|
||||
went ok and FALSE otherwise
|
||||
*/
|
||||
static wxDllType LoadLibrary(const wxString& libname, bool *success = NULL);
|
||||
|
||||
/*
|
||||
This function unloads the shared library previously loaded with
|
||||
LoadLibrary
|
||||
*/
|
||||
static wxDllType LoadLibrary(const wxString & libname, bool *success = NULL);
|
||||
/** This function unloads the shared library. */
|
||||
static void UnloadLibrary(wxDllType dll);
|
||||
/** This function returns a valid handle for the main program
|
||||
itself. */
|
||||
static wxDllType GetProgramHandle(void);
|
||||
/** This function resolves a symbol in a loaded DLL, such as a
|
||||
variable or function name.
|
||||
@param dllHandle Handle of the DLL, as returned by LoadDll().
|
||||
@param name Name of the symbol.
|
||||
@return A pointer to the symbol.
|
||||
|
||||
/*
|
||||
This function returns a valid handle for the main program
|
||||
itself or NULL if back linking is not supported by the current platform
|
||||
(e.g. Win32).
|
||||
*/
|
||||
static wxDllType GetProgramHandle();
|
||||
|
||||
/*
|
||||
This function resolves a symbol in a loaded DLL, such as a
|
||||
variable or function name.
|
||||
|
||||
dllHandle Handle of the DLL, as returned by LoadDll().
|
||||
name Name of the symbol.
|
||||
|
||||
Returns the pointer to the symbol or NULL on error.
|
||||
*/
|
||||
static void * GetSymbol(wxDllType dllHandle, const wxString &name);
|
||||
|
||||
@ -100,7 +115,7 @@ public:
|
||||
static wxString GetDllExt();
|
||||
|
||||
private:
|
||||
/// forbid construction of objects
|
||||
// forbid construction of objects
|
||||
wxDllLoader();
|
||||
};
|
||||
|
||||
@ -108,14 +123,19 @@ private:
|
||||
// wxDynamicLibrary - friendly interface to wxDllLoader
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class wxDynamicLibrary
|
||||
class WXDLLEXPORT wxDynamicLibrary
|
||||
{
|
||||
public:
|
||||
// ctors
|
||||
wxDynamicLibrary() { m_library = 0; }
|
||||
wxDynamicLibrary(const wxString& name) { Load(name); }
|
||||
|
||||
// return TRUE if the library was loaded successfully
|
||||
bool IsLoaded() const { return m_library != 0; }
|
||||
operator bool() const { return IsLoaded(); }
|
||||
|
||||
// load the library with the given name (full or not), return TRUE on
|
||||
// success
|
||||
bool Load(const wxString& name)
|
||||
{
|
||||
m_library = wxDllLoader::LoadLibrary(name);
|
||||
@ -123,12 +143,15 @@ public:
|
||||
return IsLoaded();
|
||||
}
|
||||
|
||||
// unload the library, also done automatically in dtor
|
||||
void Unload()
|
||||
{
|
||||
if ( IsLoaded() )
|
||||
wxDllLoader::UnloadLibrary(m_library)
|
||||
wxDllLoader::UnloadLibrary(m_library);
|
||||
}
|
||||
|
||||
// load a symbol from the library, return NULL if an error occured or
|
||||
// symbol wasn't found
|
||||
void *GetSymbol(const wxString& name) const
|
||||
{
|
||||
wxCHECK_MSG( IsLoaded(), NULL,
|
||||
@ -137,12 +160,19 @@ public:
|
||||
return wxDllLoader::GetSymbol(m_library, name);
|
||||
}
|
||||
|
||||
// unload the library
|
||||
//
|
||||
// NB: dtor is not virtual, don't derive from this class
|
||||
~wxDynamicLibrary() { Unload(); }
|
||||
|
||||
private:
|
||||
// the handle to DLL or NULL
|
||||
wxDllType m_library;
|
||||
};
|
||||
|
||||
// no copy ctor/assignment operators (or we'd try to unload the library
|
||||
// twice)
|
||||
DECLARE_NO_COPY_CLASS(wxDynamicLibrary);
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxLibrary
|
||||
@ -150,12 +180,9 @@ private:
|
||||
|
||||
class WXDLLEXPORT wxLibrary : public wxObject
|
||||
{
|
||||
public:
|
||||
wxHashTable classTable;
|
||||
|
||||
public:
|
||||
wxLibrary(wxDllType handle);
|
||||
~wxLibrary();
|
||||
virtual ~wxLibrary();
|
||||
|
||||
// Get a symbol from the dynamic library
|
||||
void *GetSymbol(const wxString& symbname);
|
||||
@ -167,10 +194,11 @@ protected:
|
||||
void PrepareClasses(wxClassInfo *first);
|
||||
|
||||
wxDllType m_handle;
|
||||
|
||||
public:
|
||||
wxHashTable classTable;
|
||||
};
|
||||
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxLibraries
|
||||
// ----------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user