+#define wxDllGetSymbol(handle, name) dlsym(handle, name)
+# define wxDllClose dlclose
+#elif defined(HAVE_SHL_LOAD)
+# define wxDllOpen(lib) shl_load(lib.fn_str(), BIND_DEFERRED, 0)
+# define wxDllClose shl_unload
+
+ static inline void *wxDllGetSymbol(shl_t handle, const wxString& name)
+ {
+ void *sym;
+ if ( shl_findsym(&handle, name.mb_str(), TYPE_UNDEFINED, &sym) == 0 )
+ return sym;
+ else
+ return (void *)0;
+ }
+#elif defined(__APPLE__) && defined(__UNIX__)
+void *dlopen(const char *path, int mode /* mode is ignored */);
+void *dlsym(void *handle, const char *symbol);
+int dlclose(void *handle);
+const char *dlerror(void);
+
+# define wxDllOpen(lib) dlopen(lib.fn_str(), 0)
+# define wxDllGetSymbol(handle, name) dlsym(handle, name)
+# define wxDllClose dlclose
+#elif defined(__WINDOWS__)
+ // using LoadLibraryEx under Win32 to avoid name clash with LoadLibrary
+# ifdef __WIN32__
+#ifdef _UNICODE
+# define wxDllOpen(lib) ::LoadLibraryExW(lib, 0, 0)
+#else
+# define wxDllOpen(lib) ::LoadLibraryExA(lib, 0, 0)