+ return IsLoaded();
+}
+
+void wxDynamicLibrary::Unload()
+{
+ if( IsLoaded() )
+ {
+#if defined(__WXPM__) || defined(__EMX__)
+ DosFreeModule( m_handle );
+#elif defined(HAVE_DLOPEN) || defined(__DARWIN__)
+ dlclose( m_handle );
+#elif defined(HAVE_SHL_LOAD)
+ shl_unload( m_handle );
+#elif defined(__WINDOWS__)
+ ::FreeLibrary( m_handle );
+#elif defined(__WXMAC__) && !defined(__DARWIN__)
+ CloseConnection( (CFragConnectionID*) &m_handle );
+#else
+#error "runtime shared lib support not implemented"
+#endif
+ m_handle = 0;
+ }
+}
+
+void *wxDynamicLibrary::GetSymbol(const wxString &name, bool *success) const
+{
+ wxCHECK_MSG( IsLoaded(), NULL,
+ _T("Can't load symbol from unloaded library") );
+
+ bool failed = FALSE;
+ void *symbol = 0;
+
+#if defined(__WXMAC__) && !defined(__DARWIN__)
+ Ptr symAddress;
+ CFragSymbolClass symClass;
+ Str255 symName;
+#if TARGET_CARBON
+ c2pstrcpy( (StringPtr) symName, name );
+#else
+ strcpy( (char *)symName, name );
+ c2pstr( (char *)symName );
+#endif
+ if( FindSymbol( dllHandle, symName, &symAddress, &symClass ) == noErr )
+ symbol = (void *)symAddress;
+
+#elif defined(__WXPM__) || defined(__EMX__)
+ DosQueryProcAddr( m_handle, 1L, name.c_str(), (PFN*)symbol );
+
+#elif defined(HAVE_DLOPEN) || defined(__DARWIN__)
+ symbol = dlsym( m_handle, name.fn_str() );
+
+#elif defined(HAVE_SHL_LOAD)
+ // use local variable since shl_findsym modifies the handle argument
+ // to indicate where the symbol was found (GD)
+ wxDllType the_handle = m_handle;
+ if( shl_findsym( &the_handle, name.fn_str(), TYPE_UNDEFINED, &symbol ) != 0 )
+ symbol = 0;
+
+#elif defined(__WINDOWS__)
+ symbol = (void*) ::GetProcAddress( m_handle, name.mb_str() );