#ifdef __BORLANDC__
#pragma hdrstop
#endif
-
#if wxUSE_DYNLIB_CLASS
#include "wx/dynlib.h"
# 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(_("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;
const char *envLibPath = getenv("LD_LIBRARY_PATH");
if ( envLibPath )
libPath << ':' << envLibPath;
- wxStringTokenizer tokenizer(libPath, _T(':'));
+ wxStringTokenizer tokenizer(libPath, T(':'));
while ( tokenizer.HasMoreToken() )
{
wxString fullname(tokenizer.NextToken());