-#if defined(__WXMAC__)
- FSSpec myFSSpec ;
- 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 // !Mac
- handle = wxDllOpen(lib_name);
-#endif // OS
-
- if ( !handle )
- {
- wxLogSysError(_("Failed to load shared library '%s'"),
- lib_name.c_str());
- *success = FALSE;
- return NULL;
- }
- *success = TRUE;
- return handle;
+ if ( flags & wxDL_LAZY )
+ {
+ wxASSERT_MSG( (flags & wxDL_NOW) == 0,
+ _T("wxDL_LAZY and wxDL_NOW are mutually exclusive.") );
+#ifdef RTLD_LAZY
+ rtldFlags |= RTLD_LAZY;
+#else
+ wxLogDebug(_T("wxDL_LAZY is not supported on this platform"));
+#endif
+ }
+ else if ( flags & wxDL_NOW )
+ {
+#ifdef RTLD_NOW
+ rtldFlags |= RTLD_NOW;
+#else
+ wxLogDebug(_T("wxDL_NOW is not supported on this platform"));
+#endif
+ }
+
+ if ( flags & wxDL_GLOBAL )
+ {
+#ifdef RTLD_GLOBAL
+ rtldFlags |= RTLD_GLOBAL;
+#else
+ wxLogDebug(_T("RTLD_GLOBAL is not supported on this platform."));
+#endif
+ }
+
+ m_handle = dlopen(libname.fn_str(), rtldFlags);
+#endif // __VMS || __DARWIN__ ?
+
+#elif defined(HAVE_SHL_LOAD)
+ int shlFlags = 0;
+
+ if( flags & wxDL_LAZY )
+ {
+ wxASSERT_MSG( (flags & wxDL_NOW) == 0,
+ _T("wxDL_LAZY and wxDL_NOW are mutually exclusive.") );
+ shlFlags |= BIND_DEFERRED;
+ }
+ else if( flags & wxDL_NOW )
+ {
+ shlFlags |= BIND_IMMEDIATE;
+ }
+ m_handle = shl_load(libname.fn_str(), BIND_DEFERRED, 0);
+
+#elif defined(__WINDOWS__)
+ m_handle = ::LoadLibrary(libname.c_str());
+#else
+ #error "runtime shared lib support not implemented on this platform"
+#endif
+
+ if ( m_handle == 0 )
+ {
+ wxString msg(_("Failed to load shared library '%s'"));
+#if defined(HAVE_DLERROR) && !defined(__EMX__)
+
+#if wxUSE_UNICODE
+ wxWCharBuffer buffer = wxConvLocal.cMB2WC( dlerror() );
+ const wxChar *err = buffer;
+#else
+ const wxChar *err = dlerror();
+#endif
+
+ if( err )
+ wxLogError( msg, err );
+#else
+ wxLogSysError( msg, libname.c_str() );
+#endif
+ }
+
+ return IsLoaded();