]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/dynlib.cpp
Added (untested) support for sub-locales.
[wxWidgets.git] / src / common / dynlib.cpp
index 6fcdf2cd631e03d6659e637b2f442cc1cb73d49c..6b8bf78e38f06d4cbd4e15fbae7ad8120acd3db8 100644 (file)
@@ -31,7 +31,7 @@
 // System dependent include
 // ---------------------------------------------------------------------------
 
-#ifdef __UNIX__ 
+#if defined(__UNIX__)
 #include <dlfcn.h>
 #endif
 
@@ -71,7 +71,7 @@ wxLibrary::wxLibrary(void *handle)
 wxLibrary::~wxLibrary()
 {
   if (m_handle && m_destroy) {
-#ifdef __UNIX__
+#if defined(__UNIX__)
     dlclose(m_handle);
 #endif
 #ifdef __WINDOWS__
@@ -115,11 +115,22 @@ void wxLibrary::PrepareClasses(wxClassInfo *first)
 
 void *wxLibrary::GetSymbol(const wxString& symbname)
 {
-#ifdef __UNIX__
+#if defined(__UNIX__)
   return dlsym(m_handle, WXSTRINGCAST symbname);
-#endif
-#ifdef __WINDOWS__
+#elif defined( __WINDOWS__ )
   return GetProcAddress((HINSTANCE) m_handle, WXSTRINGCAST symbname);
+#elif defined( __WXMAC__ )
+  Ptr symAddress ;
+  CFragSymbolClass symClass ;
+  Str255       symName ;
+       
+  strcpy( (char*) symName , symbname ) ;
+  c2pstr( (char*) symName ) ;
+       
+  if ( FindSymbol( (CFragConnectionID) m_handle , symName , &symAddress , &symClass ) == noErr )
+  {
+    return symAddress ; 
+  }
 #endif
   return NULL;
 }
@@ -175,11 +186,29 @@ wxLibrary *wxLibraries::LoadLibrary(const wxString& name)
 
 #ifdef UNICODE
   HMODULE handle = LoadLibraryW(lib_name);
+#else
+#ifdef __WIN16__
+  HMODULE handle = ::LoadLibrary(lib_name);
 #else
   HMODULE handle = LoadLibraryA(lib_name);
+#endif
 #endif
   if (!handle)
     return NULL;
+#elif defined(__WXMAC__)
+  FSSpec myFSSpec ;
+  CFragConnectionID handle ;
+  Ptr  myMainAddr ;
+  Str255       myErrName ;
+       
+  wxMacPathToFSSpec( lib_name , &myFSSpec ) ;
+  if (GetDiskFragment( &myFSSpec , 0 , kCFragGoesToEOF , "\p" , kPrivateCFragCopy , &handle , &myMainAddr ,
+    myErrName ) != noErr )
+  {
+    p2cstr( myErrName ) ;
+    wxASSERT_MSG( 1 , (char*)myErrName ) ;
+       return NULL ;
+  }
 #else
   return NULL;
 #endif
@@ -199,7 +228,7 @@ wxObject *wxLibraries::CreateObject(const wxString& path)
 
   while (node) {
     obj = ((wxLibrary *)node->Data())->CreateObject(path);
-    if (obj) 
+    if (obj)
       return obj;
 
     node = node->Next();