]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxDynamicLibrary::HasSymbol()
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 17 Oct 2004 23:20:51 +0000 (23:20 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 17 Oct 2004 23:20:51 +0000 (23:20 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29957 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
docs/latex/wx/dynlib.tex
include/wx/dynlib.h
src/common/dynlib.cpp

index 11d97fd2ace6ce5f330fff2615bbaf81de95dbe0..810a821e43eca90a9f5321ac76a4647d9f27bd92 100644 (file)
@@ -205,6 +205,7 @@ OTHER CHANGES
 All:
 
 - Norvegian (BokmÃ¥l) translation added (Hans F. Nordhaug)
+- wxDynamicLibrary::HasSymbol() added
 
 All (GUI):
 
index 61accb8f3d85cefc09240087ecb08414c38e9ba3..59ef7f8a828215d283e61c2bbb6ea0cdb94bb140 100644 (file)
@@ -23,6 +23,7 @@ done in the objects destructor automatically.
 %\helpref{wxDllLoader}{wxdllloader}
 
 
+
 \membersection{wxDynamicLibrary::wxDynamicLibrary}\label{wxdynamiclibrarywxdynamiclibrary}
 
 \func{}{wxDynamicLibrary}{\void}
@@ -31,6 +32,7 @@ done in the objects destructor automatically.
 
 Constructor. Second form calls \helpref{Load}{wxdynamiclibraryload}.
 
+
 \membersection{wxDynamicLibrary::CanonicalizeName}\label{wxdynamiclibrarycanonicalizename}
 
 \func{wxString}{CanonicalizeName}{\param{const wxString\& }{name}, \param{wxDynamicLibraryCategory}{ cat = wxDL\_LIBRARY}}
@@ -51,6 +53,7 @@ The possible values for \arg{cat} are:
 \helpref{CanonicalizePluginName}{wxdynamiclibrarycanonicalizepluginname}
 
 
+
 \membersection{wxDynamicLibrary::CanonicalizePluginName}\label{wxdynamiclibrarycanonicalizepluginname}
 
 \func{wxString}{CanonicalizePluginName}{\param{const wxString\& }{name}, \param{wxPluginCategory}{ cat = wxDL\_PLUGIN\_GUI}}
@@ -68,6 +71,7 @@ The possible values for \arg{cat} are:
     \twocolitem{wxDL\_PLUGIN\_BASE}{plugin which only uses wxBase}
 \end{twocollist}
 
+
 \membersection{wxDynamicLibrary::Detach}\label{wxdynamiclibrarydetach}
 
 \func{wxDllType}{Detach}{\void}
@@ -76,9 +80,10 @@ Detaches this object from its library handle, i.e. the object will not unload
 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.
@@ -87,12 +92,25 @@ 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}}
@@ -110,6 +128,7 @@ the library name (this is done by default).}
 
 Returns \true if the library was successfully loaded, \false otherwise.
 
+
 \membersection{wxDynamicLibrary::Unload}\label{wxdynamiclibraryunload}
 
 \func{void}{Unload}{\void}
index 03da571c63f32de2aab7c0920935eae569044341..e163ae209866aebc2e3276135530710103099de7 100644 (file)
@@ -151,6 +151,16 @@ public:
     // 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)
@@ -186,6 +196,10 @@ public:
 #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;
 
index ec3c14257053d9bd0e2e452b30ef8a2e1896c6f1..e2d60444ec047053758223c201708f98c8ea4122 100644 (file)
@@ -314,12 +314,11 @@ void wxDynamicLibrary::Unload(wxDllType handle)
 #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);
@@ -360,6 +359,15 @@ void *wxDynamicLibrary::GetSymbol(const wxString &name, bool *success) const
 #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__)
@@ -376,18 +384,14 @@ void *wxDynamicLibrary::GetSymbol(const wxString &name, bool *success) const
             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,