#endif
#include "wx/wxprec.h"
+#if defined(__WINDOWS__)
+#include "wx/msw/private.h"
+#endif
#ifdef __BORLANDC__
#pragma hdrstop
#endif
-
#if wxUSE_DYNLIB_CLASS
#include "wx/dynlib.h"
#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;
return (void *)0;
}
#elif defined(__WINDOWS__)
-# include <windows.h>
-
// using LoadLibraryEx under Win32 to avoid name clash with LoadLibrary
# ifdef __WIN32__
# define wxDllOpen(lib) ::LoadLibraryEx(lib, 0, 0)
# endif // Win32/16
# define wxDllGetSymbol(handle, name) ::GetProcAddress(handle, name)
# define wxDllClose ::FreeLibrary
+
+#elif defined(__OS2__)
+
+# define INCL_DOS
+# include <os2.h>
+# define wxDllOpen(error, lib, handle) DosLoadModule(error, sizeof(error), lib, &handle)
+# define wxDllGetSymbol(handle, modaddr) DosQueryProcAddr(handle, 1L, NULL, (PFN*)modaddr)
+# define wxDllClose(handle) DosFreeModule(handle)
#else
# error "Don't know how to load shared libraries on this platform."
#endif // OS
# else //__HPUX__
fullname << ".so";
# endif //__HPUX__
-#elif defined(__WINDOWS__)
+#elif defined(__WINDOWS__) || defined(__OS2__)
fullname << ".dll";
#endif
wxDllType
wxDllLoader::GetProgramHandle(void)
{
-#ifdef __UNIX__
- return dlopen(NULL, RTLD_NOW/*RTLD_LAZY*/);
+#if defined( HAVE_DLOPEN )
+ // optain handle for main program
+ return dlopen(NULL, RTLD_NOW/*RTLD_LAZY*/);
+#elif defined (HAVE_SHL_LOAD)
+ // shl_findsymbol with NULL handle looks up in main program
+ return 0;
#else
- wxFAIL_MSG(_("This method is not implemented under Windows"));
-
- return 0;
+ wxFAIL_MSG( wxT("This method is not implemented under Windows or OS/2"));
+ return 0;
#endif
}
wxASSERT_MSG( 1 , (char*)myErrName ) ;
return NULL ;
}
+#elif defined(__OS2__)
+ char zError[256] = "";
+ wxDllOpen(zError, libname, handle);
#else // !Mac
handle = wxDllOpen(libname);
#endif // OS
if ( FindSymbol( dllHandle , symName , &symAddress , &symClass ) == noErr )
symbol = (void *)symAddress ;
+#elif defined( __OS2__ )
+ wxDllGetSymbol(dllHandle, symbol);
#else
symbol = wxDllGetSymbol(dllHandle, name);
#endif
// wxLibraries (only one instance should normally exist)
// ---------------------------------------------------------------------------
-wxLibraries::wxLibraries()
+wxLibraries::wxLibraries():m_loaded(wxKEY_STRING)
{
}
wxLibrary *lib;
wxClassInfo *old_sm_first;
+#if defined(__VISAGECPP__)
+ node = m_loaded.Find(name.GetData());
+ if (node != NULL)
+ return ((wxLibrary *)node->Data());
+#else // !OS/2
if ( (node = m_loaded.Find(name.GetData())) )
return ((wxLibrary *)node->Data());
-
+#endif
// If DLL shares data, this is necessary.
old_sm_first = wxClassInfo::sm_first;
wxClassInfo::sm_first = NULL;
wxString libPath("/lib:/usr/lib"); // system path first
const char *envLibPath = getenv("LD_LIBRARY_PATH");
if ( envLibPath )
- libPath << ':' << envLibPath;
- wxStringTokenizer tokenizer(libPath, _T(':'));
+ libPath << wxT(':') << envLibPath;
+ wxStringTokenizer tokenizer(libPath, wxT(':'));
while ( tokenizer.HasMoreToken() )
{
wxString fullname(tokenizer.NextToken());
- fullname << '/' << libname;
+ fullname << wxT('/') << libname;
if ( wxFileExists(fullname) )
{
libname = fullname;