#ifndef _WX_DYNLIB_H__
#define _WX_DYNLIB_H__
-#if defined(__GNUG__) && !defined(__APPLE__)
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
# pragma interface "dynlib.h"
#endif
#elif defined(__DARWIN__)
typedef void *wxDllType;
#elif defined(__WXMAC__)
+ #include <CodeFragments.h>
typedef CFragConnectionID wxDllType;
#else
#error "Dynamic Loading classes can't be compiled on this platform, sorry."
enum wxDynamicLibraryCategory
{
wxDL_LIBRARY, // standard library
- wxDL_MODULE, // loadable module/plugin
+ wxDL_MODULE // loadable module/plugin
};
enum wxPluginCategory
{
wxDL_PLUGIN_GUI, // plugin that uses GUI classes
- wxDL_PLUGIN_BASE, // wxBase-only plugin
+ wxDL_PLUGIN_BASE // wxBase-only plugin
};
// ----------------------------------------------------------------------------
// to use it polymorphically.
~wxDynamicLibrary() { Unload(); }
- // return TRUE if the library was loaded successfully
+ // return true if the library was loaded successfully
bool IsLoaded() const { return m_handle != 0; }
// load the library with the given name (full or not), return true if ok
// doing this
wxDllType Detach() { wxDllType h = m_handle; m_handle = 0; return h; }
+ // unload the given library handle (presumably returned by Detach() before)
+ static void Unload(wxDllType handle);
+
// unload the library, also done automatically in dtor
- void Unload();
+ void Unload() { if ( IsLoaded() ) { Unload(m_handle); m_handle = 0; } }
// Return the raw handle from dlopen and friends.
wxDllType GetLibHandle() const { return m_handle; }
+ // check if the given symbol is present in the library, useful to verify if
+ // a loadable module is our plugin, for example, without provoking error
+ // messages from GetSymbol()
+ bool HasSymbol(const wxString& name) const
+ {
+ bool ok;
+ DoGetSymbol(name, &ok);
+ return ok;
+ }
+
// resolve a symbol in a loaded DLL, such as a variable or function name.
// 'name' is the (possibly mangled) name of the symbol. (use extern "C" to
// export unmangled names)
static wxString CanonicalizeName(const wxString& name,
wxDynamicLibraryCategory cat = wxDL_LIBRARY);
- // return name of wxWindows plugin (adds compiler and version info
+ // return name of wxWidgets plugin (adds compiler and version info
// to the filename):
- static wxString CanonicalizePluginName(const wxString& name,
- wxPluginCategory cat);
+ static wxString
+ CanonicalizePluginName(const wxString& name,
+ wxPluginCategory cat = wxDL_PLUGIN_GUI);
// return plugin directory on platforms where it makes sense and empty
// string on others:
#endif
protected:
+ // the real implementation of GetSymbol()
+ void *DoGetSymbol(const wxString& name, bool *success = 0) const;
+
+
// platform specific shared lib suffix.
static const wxChar *ms_dllext;
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
+ if success pointer is not NULL, it will be filled with true if everything
+ went ok and false otherwise
*/
static wxDllType LoadLibrary(const wxString& name, bool *success = NULL);
-
+
/*
This function unloads the shared library previously loaded with
LoadLibrary