X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3d7fa4e68436ab9ecdc74e9bd68f72bdff76978d..5b36366c59ea68056ba07a3ca1c2cd6022a59735:/include/wx/dynload.h diff --git a/include/wx/dynload.h b/include/wx/dynload.h index 8aaa926807..3fdfa076be 100644 --- a/include/wx/dynload.h +++ b/include/wx/dynload.h @@ -7,13 +7,13 @@ // Created: 03/12/01 // RCS-ID: $Id$ // Copyright: (c) 2001 Ron Lee -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_DYNAMICLOADER_H__ #define _WX_DYNAMICLOADER_H__ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(__APPLE__) #pragma interface "dynload.h" #endif @@ -25,7 +25,7 @@ #if wxUSE_DYNAMIC_LOADER -#include "wx/hash.h" +#include "wx/hashmap.h" #include "wx/module.h" // FIXME: can this go in private.h or something too?? @@ -38,11 +38,10 @@ #include "wx/msw/private.h" #endif -// Ugh, I'd much rather this was typesafe, but no time -// to rewrite wxHashTable right now.. +class WXDLLIMPEXP_BASE wxPluginLibrary; -typedef wxHashTable wxDLManifest; -typedef wxHashTable wxDLImports; +WX_DECLARE_EXPORTED_STRING_HASH_MAP(wxPluginLibrary *, wxDLManifest); +typedef wxDLManifest wxDLImports; // ---------------------------------------------------------------------------- // conditional compilation @@ -99,7 +98,7 @@ enum wxDLFlags }; -class WXDLLEXPORT wxDynamicLibrary +class WXDLLIMPEXP_BASE wxDynamicLibrary { public: @@ -129,6 +128,11 @@ public: bool Load(wxString libname, int flags = wxDL_DEFAULT); + // 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 + wxDllType Detach() { wxDllType h = m_handle; m_handle = 0; return h; } + // unload the library, also done automatically in dtor void Unload(); @@ -168,7 +172,7 @@ protected: // no copy ctor/assignment operators // or we'd try to unload the library twice -DECLARE_NO_COPY_CLASS(wxDynamicLibrary) + DECLARE_NO_COPY_CLASS(wxDynamicLibrary) }; @@ -184,7 +188,7 @@ DECLARE_NO_COPY_CLASS(wxDynamicLibrary) // instantiate this class directly anyway, use wxPluginManager // instead. -class WXDLLEXPORT wxPluginLibrary : public wxDynamicLibrary +class WXDLLIMPEXP_BASE wxPluginLibrary : public wxDynamicLibrary { public: @@ -234,11 +238,11 @@ private: void RegisterModules(); // Init any wxModules in the lib. void UnregisterModules(); // Cleanup any wxModules we installed. -DECLARE_NO_COPY_CLASS(wxPluginLibrary) + DECLARE_NO_COPY_CLASS(wxPluginLibrary) }; -class WXDLLEXPORT wxPluginManager +class WXDLLIMPEXP_BASE wxPluginManager { public: @@ -257,7 +261,7 @@ public: // Instance methods. - wxPluginManager() : m_entry(0) {}; + wxPluginManager() : m_entry(NULL) {}; wxPluginManager(const wxString &libname, int flags = wxDL_DEFAULT) { Load(libname, flags); @@ -277,14 +281,21 @@ public: static void ClearManifest() { delete ms_manifest; ms_manifest = NULL; } private: + // return the pointer to the entry for the library with given name in + // ms_manifest or NULL if none + static wxPluginLibrary *FindByName(const wxString& name) + { + const wxDLManifest::iterator i = ms_manifest->find(name); + + return i == ms_manifest->end() ? NULL : i->second; + } static wxDLManifest* ms_manifest; // Static hash of loaded libs. wxPluginLibrary* m_entry; // Cache our entry in the manifest. // We could allow this class to be copied if we really // wanted to, but not without modification. - -DECLARE_NO_COPY_CLASS(wxPluginManager) + DECLARE_NO_COPY_CLASS(wxPluginManager) }; @@ -297,7 +308,7 @@ DECLARE_NO_COPY_CLASS(wxPluginManager) // serves as a namespace for its static member functions. #if WXWIN_COMPATIBILITY_2_2 -class WXDLLEXPORT wxDllLoader +class WXDLLIMPEXP_BASE wxDllLoader { public: