%\helpref{wxDllLoader}{wxdllloader}
+
\membersection{wxDynamicLibrary::wxDynamicLibrary}\label{wxdynamiclibrarywxdynamiclibrary}
\func{}{wxDynamicLibrary}{\void}
Constructor. Second form calls \helpref{Load}{wxdynamiclibraryload}.
+
\membersection{wxDynamicLibrary::CanonicalizeName}\label{wxdynamiclibrarycanonicalizename}
\func{wxString}{CanonicalizeName}{\param{const wxString\& }{name}, \param{wxDynamicLibraryCategory}{ cat = wxDL\_LIBRARY}}
\helpref{CanonicalizePluginName}{wxdynamiclibrarycanonicalizepluginname}
+
\membersection{wxDynamicLibrary::CanonicalizePluginName}\label{wxdynamiclibrarycanonicalizepluginname}
\func{wxString}{CanonicalizePluginName}{\param{const wxString\& }{name}, \param{wxPluginCategory}{ cat = wxDL\_PLUGIN\_GUI}}
\twocolitem{wxDL\_PLUGIN\_BASE}{plugin which only uses wxBase}
\end{twocollist}
+
\membersection{wxDynamicLibrary::Detach}\label{wxdynamiclibrarydetach}
\func{wxDllType}{Detach}{\void}
the library any longer in its destructor but it is now the callers
responsability to do this using \helpref{Unload}{wxdynamiclibraryunload}.
+
\membersection{wxDynamicLibrary::GetSymbol}\label{wxdynamiclibrarygetsymbol}
-\constfunc{void*}{GetSymbol}{\param{const wxString\& }{name}}
+\constfunc{void *}{GetSymbol}{\param{const wxString\& }{name}}
Returns pointer to symbol {\it name} in the library or NULL if the library
contains no such symbol.
\helpref{wxDYNLIB\_FUNCTION}{wxdynlibfunction}
+
+\membersection{wxDynamicLibrary::HasSymbol}\label{wxdynamiclibraryhassymbol}
+
+\constfunc{bool}{HasSymbol}{\param{const wxString\& }{name}}
+
+Returns \true if the symbol with the given \arg{name} is present in the dynamic
+library, \false otherwise. Unlike \helpref{GetSymbol}{wxdynamiclibrarygetsymbol},
+this function doesn't log an error message if the symbol is not found.
+
+\newsince{2.5.4}
+
+
\membersection{wxDynamicLibrary::IsLoaded}\label{wxdynamiclibraryisloaded}
\constfunc{bool}{IsLoaded}{\void}
Returns \true if the library was successfully loaded, \false otherwise.
+
\membersection{wxDynamicLibrary::Load}\label{wxdynamiclibraryload}
\func{bool}{Load}{\param{const wxString\& }{name}, \param{int }{flags = wxDL\_DEFAULT}}
Returns \true if the library was successfully loaded, \false otherwise.
+
\membersection{wxDynamicLibrary::Unload}\label{wxdynamiclibraryunload}
\func{void}{Unload}{\void}
// 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)
#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;
#endif
}
-void *wxDynamicLibrary::GetSymbol(const wxString &name, bool *success) const
+void *wxDynamicLibrary::DoGetSymbol(const wxString &name, bool *success) const
{
wxCHECK_MSG( IsLoaded(), NULL,
_T("Can't load symbol from unloaded library") );
- bool failed = false;
void *symbol = 0;
wxUnusedVar(symbol);
#error "runtime shared lib support not implemented"
#endif
+ if ( success )
+ *success = symbol != NULL;
+
+ return symbol;
+}
+
+void *wxDynamicLibrary::GetSymbol(const wxString& name, bool *success) const
+{
+ void *symbol = DoGetSymbol(name, success);
if ( !symbol )
{
#if defined(HAVE_DLERROR) && !defined(__EMX__)
wxLogError(wxT("%s"), err);
}
#else
- failed = true;
wxLogSysError(_("Couldn't find symbol '%s' in a dynamic library"),
name.c_str());
#endif
}
- if( success )
- *success = !failed;
return symbol;
}
-
/*static*/
wxString
wxDynamicLibrary::CanonicalizeName(const wxString& name,