]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/dynlib.cpp
* Fixed a bug in notebook.tex
[wxWidgets.git] / src / common / dynlib.cpp
index 2fd32ddd586b3d5cade90e041a3e677898061baa..6fcdf2cd631e03d6659e637b2f442cc1cb73d49c 100644 (file)
@@ -55,7 +55,7 @@ wxLibraries wxTheLibraries;
 
 wxLibrary::wxLibrary(void *handle)
 {
-  typedef wxClassInfo **(*t_get_first)(void);
+  typedef wxClassInfo *(*t_get_first)(void);
   t_get_first get_first;
 
   m_handle = handle;
@@ -90,19 +90,19 @@ wxObject *wxLibrary::CreateObject(const wxString& name)
   return info->CreateObject();
 }
 
-void wxLibrary::PrepareClasses(wxClassInfo **first)
+void wxLibrary::PrepareClasses(wxClassInfo *first)
 {
   // Index all class infos by their class name
-  wxClassInfo *info = *first;
+  wxClassInfo *info = first;
   while (info)
   {
     if (info->m_className)
       classTable.Put(info->m_className, (wxObject *)info);
-    info = info->m_next;
+    info = info->GetNext();
   }
 
   // Set base pointers for each wxClassInfo
-  info = *first;
+  info = first;
   while (info)
   {
     if (info->GetBaseClassName1())
@@ -111,7 +111,6 @@ void wxLibrary::PrepareClasses(wxClassInfo **first)
       info->m_baseInfo2 = (wxClassInfo *)classTable.Get(info->GetBaseClassName2());
     info = info->m_next;
   }
-  *first = NULL;
 }
 
 void *wxLibrary::GetSymbol(const wxString& symbname)
@@ -150,10 +149,15 @@ wxLibrary *wxLibraries::LoadLibrary(const wxString& name)
   wxString lib_name = name;
   wxNode *node;
   wxLibrary *lib;
+  wxClassInfo *old_sm_first;
 
   if ( (node = m_loaded.Find(name.GetData())) )
     return ((wxLibrary *)node->Data());
 
+  // If DLL shares data, this is necessary.
+  old_sm_first = wxClassInfo::sm_first;
+  wxClassInfo::sm_first = NULL;
+
 #if defined(__UNIX__)
   lib_name.Prepend("./lib");
   lib_name += ".so";
@@ -162,6 +166,8 @@ wxLibrary *wxLibraries::LoadLibrary(const wxString& name)
 
   void *handle = dlopen(WXSTRINGCAST lib_name, RTLD_LAZY);
 
+  printf("error = %s\n", dlerror());
+
   if (!handle)
     return NULL;
 #elif defined(__WINDOWS__)
@@ -180,6 +186,8 @@ wxLibrary *wxLibraries::LoadLibrary(const wxString& name)
 
   lib = new wxLibrary((void *)handle);
 
+  wxClassInfo::sm_first = old_sm_first;
+
   m_loaded.Append(name.GetData(), lib);
   return lib;
 }