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