+}
+
+/* static */
+wxDllType
+wxDllLoader::LoadLibrary(const wxString & libname, bool *success)
+{
+ wxDllType handle;
+
+#if defined(__WXMAC__)
+ FSSpec myFSSpec ;
+ Ptr myMainAddr ;
+ Str255 myErrName ;
+
+ wxMacPathToFSSpec( libname , &myFSSpec ) ;
+ if (GetDiskFragment( &myFSSpec , 0 , kCFragGoesToEOF , "\p" , kPrivateCFragCopy , &handle , &myMainAddr ,
+ myErrName ) != noErr )
+ {
+ p2cstr( myErrName ) ;
+ wxASSERT_MSG( 1 , (char*)myErrName ) ;
+ return NULL ;
+ }
+#elif defined(__WXPM__) || defined(__EMX__)
+ char zError[256] = "";
+ wxDllOpen(zError, libname, handle);
+#else // !Mac
+ handle = wxDllOpen(libname);
+#endif // OS
+
+ if ( !handle )
+ {
+ wxString msg(_("Failed to load shared library '%s'"));
+
+#ifdef HAVE_DLERROR
+ const char *errmsg = dlerror();
+ if ( errmsg )
+ {
+ // the error string format is "libname: ...", but we already have
+ // libname, so cut it off
+ const char *p = strchr(errmsg, ':');
+ if ( p )
+ {
+ if ( *++p == ' ' )
+ p++;
+ }
+ else
+ {
+ p = errmsg;
+ }
+
+ msg += _T(" (%s)");
+ wxLogError(msg, libname.c_str(), p);
+ }
+ else
+#endif // HAVE_DLERROR
+ {
+ wxLogSysError(msg, libname.c_str());
+ }
+ }
+
+ if ( success )
+ {
+ *success = handle != 0;
+ }
+
+ return handle;
+}
+
+
+/* static */
+void
+wxDllLoader::UnloadLibrary(wxDllType handle)
+{
+ wxDllClose(handle);
+}
+
+/* static */
+void *
+wxDllLoader::GetSymbol(wxDllType dllHandle, const wxString &name)
+{
+ void *symbol = NULL; // return value
+
+#if defined( __WXMAC__ )
+ Ptr symAddress ;
+ CFragSymbolClass symClass ;
+ Str255 symName ;
+
+ strcpy( (char*) symName , name ) ;
+ c2pstr( (char*) symName ) ;
+
+ if ( FindSymbol( dllHandle , symName , &symAddress , &symClass ) == noErr )
+ symbol = (void *)symAddress ;
+#elif defined( __WXPM__ ) || defined(__EMX__)
+ wxDllGetSymbol(dllHandle, symbol);
+#else
+ // mb_str() is necessary in Unicode build
+ symbol = wxDllGetSymbol(dllHandle, name.mb_str());