1. extracted MSW-specific part of wxDynamicLibrary in msw/dlmsw.cpp

2. added and documented wxDynamicLibrary::ListLoaded()


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31403 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2005-01-16 20:50:06 +00:00
parent c4526184a7
commit defbed48e7
5 changed files with 487 additions and 23 deletions

View File

@@ -21,6 +21,7 @@
#if wxUSE_DYNLIB_CLASS
#include "wx/string.h"
#include "wx/dynarray.h"
// FIXME: can this go in private.h or something too??
#if defined(__WXPM__) || defined(__EMX__)
@@ -32,6 +33,8 @@
#include "wx/msw/private.h"
#endif
class WXDLLIMPEXP_BASE wxDynamicLibraryDetailsCreator;
// ----------------------------------------------------------------------------
// conditional compilation
// ----------------------------------------------------------------------------
@@ -106,9 +109,62 @@ enum wxPluginCategory
#define wxDYNLIB_FUNCTION(type, name, dynlib) \
type pfn ## name = (type)(dynlib).GetSymbol(_T(#name))
// ---------------------------------------------------------------------------
// wxDynamicLibrary
// ---------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// wxDynamicLibraryDetails: contains details about a loaded wxDynamicLibrary
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_BASE wxDynamicLibraryDetails
{
public:
// ctor, normally never used as these objects are only created by
// wxDynamicLibrary::ListLoaded()
wxDynamicLibraryDetails() { m_address = NULL; m_length = 0; }
// get the (base) name
wxString GetName() const { return m_name; }
// get the full path of this object
wxString GetPath() const { return m_path; }
// get the load address and the extent, return true if this information is
// available
bool GetAddress(void **addr, size_t *len) const
{
if ( !m_address )
return false;
if ( addr )
*addr = m_address;
if ( len )
*len = m_length;
return true;
}
// return the version of the DLL (may be empty if no version info)
wxString GetVersion() const
{
return m_version;
}
private:
wxString m_name,
m_path,
m_version;
void *m_address;
size_t m_length;
friend class wxDynamicLibraryDetailsCreator;
};
WX_DECLARE_USER_EXPORTED_OBJARRAY(wxDynamicLibraryDetails,
wxDynamicLibraryDetailsArray,
WXDLLIMPEXP_BASE);
// ----------------------------------------------------------------------------
// wxDynamicLibrary: represents a handle to a DLL/shared object
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_BASE wxDynamicLibrary
{
@@ -135,8 +191,13 @@ public:
bool IsLoaded() const { return m_handle != 0; }
// load the library with the given name (full or not), return true if ok
bool Load(wxString libname, int flags = wxDL_DEFAULT);
bool Load(const wxString& libname, int flags = wxDL_DEFAULT);
// raw function for loading dynamic libs: always behaves as if
// wxDL_VERBATIM were specified and doesn't log error message if the
// library couldn't be loaded but simply returns NULL
static wxDllType RawLoad(const wxString& libname);
// detach the library object from its handle, i.e. prevent the object from
// unloading the library in its dtor -- the caller is now responsible for
// doing this
@@ -172,8 +233,19 @@ public:
//
// Returns a pointer to the symbol on success, or NULL if an error occurred
// or the symbol wasn't found.
void *GetSymbol(const wxString& name, bool *success = 0) const;
void *GetSymbol(const wxString& name, bool *success = NULL) const;
// low-level version of GetSymbol()
static void *RawGetSymbol(wxDllType handle, const wxString& name);
void *RawGetSymbol(const wxString& name) const
{
return RawGetSymbol(m_handle, name);
}
// return all modules/shared libraries in the address space of this process
//
// returns an empty array if not implemented or an error occured
static wxDynamicLibraryDetailsArray ListLoaded();
// return platform-specific name of dynamic library with proper extension
// and prefix (e.g. "foo.dll" on Windows or "libfoo.so" on Linux)
@@ -196,7 +268,7 @@ public:
#endif
protected:
// the real implementation of GetSymbol()
// common part of GetSymbol() and HasSymbol()
void *DoGetSymbol(const wxString& name, bool *success = 0) const;