]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/dynlib.cpp
* Fixed two memory leaks.
[wxWidgets.git] / src / common / dynlib.cpp
index 4f638aac530fc2605c8efa4dc118fb942ba49091..db17f823d469a2e09f154ea9960dea2f3c6957b7 100644 (file)
 // System dependent include
 // ---------------------------------------------------------------------------
 
 // System dependent include
 // ---------------------------------------------------------------------------
 
-#ifdef linux
+#ifdef __UNIX__ 
 #include <dlfcn.h>
 #endif
 
 #include <dlfcn.h>
 #endif
 
+#ifdef __WINDOWS__
+#include <windows.h>
+#endif
+
 // ---------------------------------------------------------------------------
 // Global variables
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 // Global variables
 // ---------------------------------------------------------------------------
@@ -59,7 +63,12 @@ wxLibrary::~wxLibrary()
     else
       delete m_liblist;
 
     else
       delete m_liblist;
 
+#ifdef __UNIX__
     dlclose(m_handle);
     dlclose(m_handle);
+#endif
+#ifdef __WINDOWS__
+    FreeLibrary((HMODULE)m_handle);
+#endif
   }
 }
 
   }
 }
 
@@ -70,9 +79,13 @@ wxObject *wxLibrary::CreateObject(const wxString& name)
 
 void *wxLibrary::GetSymbol(const wxString& symbname)
 {
 
 void *wxLibrary::GetSymbol(const wxString& symbname)
 {
-#ifdef linux
-  return dlsym(m_handle, symbname.GetData());
+#ifdef __UNIX__
+  return dlsym(m_handle, WXSTRINGCAST symbname);
+#endif
+#ifdef __WINDOWS__
+  return GetProcAddress(m_handle, WXSTRINGCAST symbname);
 #endif
 #endif
+  return NULL;
 }
 
 // ---------------------------------------------------------------------------
 }
 
 // ---------------------------------------------------------------------------
@@ -104,22 +117,25 @@ wxLibrary *wxLibraries::LoadLibrary(const wxString& name)
   if ( (node = m_loaded.Find(name.GetData())) )
     return ((wxLibrary *)node->Data());
 
   if ( (node = m_loaded.Find(name.GetData())) )
     return ((wxLibrary *)node->Data());
 
-#ifdef linux
+#ifdef __UNIX__
   lib_name.Prepend("./lib");
   lib_name += ".so";
 
   printf("lib_name = %s\n", WXSTRINGCAST lib_name);
 
   lib_name.Prepend("./lib");
   lib_name += ".so";
 
   printf("lib_name = %s\n", WXSTRINGCAST lib_name);
 
-  void *handle = dlopen(lib_name.GetData(), RTLD_LAZY);
-
-  printf("handle = %x\n", handle);
-  lib = new wxLibrary(handle);
+  void *handle = dlopen(WXSTRINGCAST lib_name, RTLD_LAZY);
 
 
+  if (!handle)
+    return NULL;
 #endif
 #ifdef __WINDOWS__
   lib_name += ".dll";
 
 #endif
 #ifdef __WINDOWS__
   lib_name += ".dll";
 
+  HMODULE handle = LoadLibrary(lib_name);
+  if (!handle)
+    return NULL;
 #endif
 #endif
+  lib = new wxLibrary((void *)handle);
 
   m_loaded.Append(name.GetData(), lib);
   return lib;
 
   m_loaded.Append(name.GetData(), lib);
   return lib;
@@ -150,7 +166,7 @@ wxClassLibrary::wxClassLibrary(void)
 
 wxClassLibrary::~wxClassLibrary(void)
 {
 
 wxClassLibrary::~wxClassLibrary(void)
 {
-  uint i;
+  size_t i;
 
   for (i=0;i<m_list.Count();i++)
     delete (m_list[i]);
 
   for (i=0;i<m_list.Count();i++)
     delete (m_list[i]);
@@ -168,7 +184,7 @@ void wxClassLibrary::RegisterClass(wxClassInfo *class_info,
 
 void wxClassLibrary::UnregisterClass(wxClassInfo *class_info)
 {
 
 void wxClassLibrary::UnregisterClass(wxClassInfo *class_info)
 {
-  uint i = 0;
+  size_t i = 0;
 
   while (i < m_list.Count()) {
     if (m_list[i]->class_info == class_info) {
 
   while (i < m_list.Count()) {
     if (m_list[i]->class_info == class_info) {
@@ -184,7 +200,7 @@ bool wxClassLibrary::CreateObjects(const wxString& path,
                                    wxArrayClassInfo& objs)
 {
   wxClassLibInfo *info;
                                    wxArrayClassInfo& objs)
 {
   wxClassLibInfo *info;
-  uint i = 0;
+  size_t i = 0;
 
   while (i < m_list.Count()) {
     info = m_list[i];
 
   while (i < m_list.Count()) {
     info = m_list[i];
@@ -199,7 +215,7 @@ bool wxClassLibrary::FetchInfos(const wxString& path,
                                 wxArrayClassLibInfo& infos)
 {
   wxClassLibInfo *info;
                                 wxArrayClassLibInfo& infos)
 {
   wxClassLibInfo *info;
-  uint i = 0;
+  size_t i = 0;
 
   while (i < m_list.Count()) {
     info = m_list[i];
 
   while (i < m_list.Count()) {
     info = m_list[i];
@@ -216,7 +232,7 @@ bool wxClassLibrary::FetchInfos(const wxString& path,
 wxObject *wxClassLibrary::CreateObject(const wxString& path)
 {
   wxClassLibInfo *info;
 wxObject *wxClassLibrary::CreateObject(const wxString& path)
 {
   wxClassLibInfo *info;
-  uint i = 0;
+  size_t i = 0;
 
   while (i < m_list.Count()) {
     info = m_list[i];
 
   while (i < m_list.Count()) {
     info = m_list[i];