]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/dynlib.h
Bug #1040683: Remove assert when deleting menu entry.
[wxWidgets.git] / include / wx / dynlib.h
index 3cd25fbf7bdea6047896fe16a5cb2a4cf07dc553..e163ae209866aebc2e3276135530710103099de7 100644 (file)
@@ -12,7 +12,7 @@
 #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
 
@@ -49,6 +49,7 @@
 #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."
@@ -81,13 +82,13 @@ enum wxDLFlags
 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
 };
 
 // ----------------------------------------------------------------------------
@@ -130,7 +131,7 @@ public:
     //       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
@@ -141,12 +142,25 @@ public:
     // 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)
@@ -166,10 +180,11 @@ public:
     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:
@@ -181,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;
 
@@ -215,11 +234,11 @@ public:
       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