void *dlsym(void *handle, const char *symbol)
{
- void *addr;
-
- NSSymbol nsSymbol = NSLookupSymbolInModule( handle , symbol ) ;
-
- if ( nsSymbol)
- {
- addr = NSAddressOfSymbol(nsSymbol);
- }
- else
- {
- addr = NULL;
- }
- return addr;
+ // as on many other systems, C symbols have prepended underscores under
+ // Darwin but unlike the normal dlopen(), NSLookupSymbolInModule() is not
+ // aware of this
+ NSSymbol nsSymbol = NSLookupSymbolInModule( handle,
+ wxString(_T('_')) + symbol );
+ return nsSymbol ? NSAddressOfSymbol(nsSymbol) : NULL;
}
#endif // defined(__DARWIN__)
#if defined(__HPUX__)
const wxChar *wxDynamicLibrary::ms_dllext = _T(".sl");
#elif defined(__DARWIN__)
- const wxChar *wxDynamicLibrary::ms_dllext = _T(".dylib");
+ const wxChar *wxDynamicLibrary::ms_dllext = _T(".bundle");
#else
const wxChar *wxDynamicLibrary::ms_dllext = _T(".so");
#endif
#endif
}
-void *wxDynamicLibrary::GetSymbol(const wxString &name, bool *success) const
+void *wxDynamicLibrary::DoGetSymbol(const wxString &name, bool *success) const
{
wxCHECK_MSG( IsLoaded(), NULL,
_T("Can't load symbol from unloaded library") );
- bool failed = false;
void *symbol = 0;
wxUnusedVar(symbol);
#error "runtime shared lib support not implemented"
#endif
+ if ( success )
+ *success = symbol != NULL;
+
+ return symbol;
+}
+
+void *wxDynamicLibrary::GetSymbol(const wxString& name, bool *success) const
+{
+ void *symbol = DoGetSymbol(name, success);
if ( !symbol )
{
#if defined(HAVE_DLERROR) && !defined(__EMX__)
wxLogError(wxT("%s"), err);
}
#else
- failed = true;
wxLogSysError(_("Couldn't find symbol '%s' in a dynamic library"),
name.c_str());
#endif
}
- if( success )
- *success = !failed;
return symbol;
}
-
/*static*/
wxString
wxDynamicLibrary::CanonicalizeName(const wxString& name,