- if (m_handle) {
- typedef void (*t_free_list)(wxClassLibrary *);
- t_free_list free_list;
-
- free_list = (t_free_list) GetSymbol("FreeClassList");
- if (free_list != NULL)
- free_list(m_liblist);
- else
- delete m_liblist;
-
-#if defined(__LINUX__) || defined(__SGI__)
- dlclose(m_handle);
+ wxASSERT_MSG(m_handle == 0, wxT("Library already loaded."));
+
+ // add the proper extension for the DLL ourselves unless told not to
+ wxString libname = libnameOrig;
+ if ( !(flags & wxDL_VERBATIM) )
+ {
+ // and also check that the libname doesn't already have it
+ wxString ext;
+ wxFileName::SplitPath(libname, NULL, NULL, &ext);
+ if ( ext.empty() )
+ {
+ libname += GetDllExt(wxDL_MODULE);
+ }
+ }
+
+ // different ways to load a shared library
+ //
+ // FIXME: should go to the platform-specific files!
+#if defined(__WXPM__) || defined(__EMX__)
+ char err[256] = "";
+ DosLoadModule(err, sizeof(err), libname.c_str(), &m_handle);
+#else // this should be the only remaining branch eventually
+ m_handle = RawLoad(libname, flags);