// Created: 03/12/01
// RCS-ID: $Id$
// Copyright: (c) 2001 Ron Lee <ron@debian.org>
-// 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
#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??
#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
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();
// no copy ctor/assignment operators
// or we'd try to unload the library twice
-DECLARE_NO_COPY_CLASS(wxDynamicLibrary)
+ DECLARE_NO_COPY_CLASS(wxDynamicLibrary)
};
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)
};
// Instance methods.
- wxPluginManager() : m_entry(0) {};
+ wxPluginManager() : m_entry(NULL) {};
wxPluginManager(const wxString &libname, int flags = wxDL_DEFAULT)
{
Load(libname, flags);
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)
};