+}
+
+/* static */
+wxDllType wxDllLoader::LoadLibrary(const wxString & libname, bool *success)
+{
+    wxDllType   handle;
+    bool        failed = FALSE;
+
+#if defined(__WXMAC__) && !defined(__UNIX__)
+    FSSpec      myFSSpec;
+    Ptr         myMainAddr;
+    Str255      myErrName;
+
+    wxMacFilename2FSSpec( libname , &myFSSpec );
+
+    if( GetDiskFragment( &myFSSpec,
+                         0,
+                         kCFragGoesToEOF,
+                         "\p",
+                         kPrivateCFragCopy,
+                         &((CFragConnectionID)handle),
+                         &myMainAddr,
+                         myErrName ) != noErr )
+    {
+        p2cstr( myErrName );
+        wxLogSysError( _("Failed to load shared library '%s' Error '%s'"),
+                       libname.c_str(),
+                       (char*)myErrName );
+        handle = 0;
+        failed = TRUE;
+    }
+
+#elif defined(__WXPM__) || defined(__EMX__)
+    char        zError[256] = "";
+    wxDllOpen(zError, libname, handle);
+
+#else
+    handle = wxDllOpen(libname);
+
+#endif
+
+    if ( !handle )
+    {
+        wxString msg(_("Failed to load shared library '%s'"));
+
+#ifdef HAVE_DLERROR
+        const wxChar *err = dlerror();
+        if( err )
+        {
+            failed = TRUE;
+            wxLogError( msg, err );
+        }
+#else
+        failed = TRUE;
+        wxLogSysError( msg, libname.c_str() );
+#endif
+    }
+
+    if ( success )
+        *success = !failed;
+
+    return handle;
+}
+
+
+/* static */
+void wxDllLoader::UnloadLibrary(wxDllType handle)
+{
+   wxDllClose(handle);
+}
+
+/* static */
+void *wxDllLoader::GetSymbol(wxDllType dllHandle, const wxString &name, bool *success)
+{
+    bool    failed = FALSE;
+    void    *symbol = 0;
+
+#if defined(__WXMAC__) && !defined(__UNIX__)
+    Ptr                 symAddress;
+    CFragSymbolClass    symClass;
+    Str255              symName;
+
+#if TARGET_CARBON
+    c2pstrcpy( (StringPtr) symName, name );
+#else
+    strcpy( (char *) symName, name );
+    c2pstr( (char *) symName );
+#endif
+    if( FindSymbol( ((CFragConnectionID)dllHandle), symName, &symAddress, &symClass ) == noErr )
+        symbol = (void *)symAddress;
+
+#elif defined(__WXPM__) || defined(__EMX__)
+    wxDllGetSymbol(dllHandle, symbol);
+
+#else // Windows or Unix
+
+    // mb_str() is necessary in Unicode build
+    //
+    // "void *" cast is needed by gcc 3.1 + w32api 1.4, don't ask me why
+    symbol = (void *)wxDllGetSymbol(dllHandle, name.mb_str());
+
+#endif // OS
+
+    if ( !symbol )
+    {
+        wxString msg(_("wxDllLoader failed to GetSymbol '%s'"));
+
+#ifdef HAVE_DLERROR
+        const wxChar *err = dlerror();
+        if( err )
+        {
+            failed = TRUE;
+            wxLogError( msg, err );
+        }
+#else
+        failed = TRUE;
+        wxLogSysError(_("Couldn't find symbol '%s' in a dynamic library"),
+                      name.c_str());
+#endif
+    }
+
+    if( success )
+        *success = !failed;
+
+    return symbol;