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:
Vadim Zeitlin
2001-06-15 22:55:11 +00:00
parent 181b406894
commit 33a8563e66

View File

@@ -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
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------