X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/af49c4b8a2d3553e733e71c7dd3911881f4c1a2a..3b3fe1f6e766caf35aa3ff4ce0ac01d31699da71:/include/wx/dynload.h diff --git a/include/wx/dynload.h b/include/wx/dynload.h index 11462250d6..145ec568a5 100644 --- a/include/wx/dynload.h +++ b/include/wx/dynload.h @@ -7,7 +7,7 @@ // Created: 03/12/01 // RCS-ID: $Id$ // Copyright: (c) 2001 Ron Lee -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_DYNAMICLOADER_H__ @@ -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 WXDLLEXPORT wxPluginLibrary; -typedef wxHashTable wxDLManifest; -typedef wxHashTable wxDLImports; +WX_DECLARE_EXPORTED_STRING_HASH_MAP(wxPluginLibrary *, wxDLManifest); +typedef wxDLManifest wxDLImports; // ---------------------------------------------------------------------------- // conditional compilation @@ -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) }; @@ -234,7 +238,7 @@ 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) }; @@ -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) };