#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"
// conditional compilation
// ----------------------------------------------------------------------------
-#if defined(HAVE_DLOPEN)
+#if defined(__WXPM__) || defined(__EMX__)
+# 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)
+#elif defined(HAVE_DLOPEN)
# define wxDllOpen(lib) dlopen(lib.fn_str(), RTLD_NOW/*RTLD_LAZY*/)
# define wxDllGetSymbol(handle, name) dlsym(handle, name.mb_str())
# define wxDllClose dlclose
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)
{
wxString fullname(basename);
-#if defined(__UNIX__)
+#if defined(__WINDOWS__) || defined(__WXPM__) || defined(__EMX__)
+ fullname << ".dll";
+#elif defined(__UNIX__)
# if defined(__HPUX__)
fullname << ".sl";
# else //__HPUX__
fullname << ".so";
# endif //__HPUX__
-#elif defined(__WINDOWS__)
- fullname << ".dll";
#endif
return fullname;
wxDllType
wxDllLoader::GetProgramHandle(void)
{
-#ifdef __UNIX__
- return dlopen(NULL, RTLD_NOW/*RTLD_LAZY*/);
+#if defined( HAVE_DLOPEN ) && !defined(__EMX__)
+ // 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(__WXPM__) || defined(__EMX__)
+ 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( __WXPM__ ) || defined(__EMX__)
+ 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;