aboutsummaryrefslogtreecommitdiffstats
path: root/dynamic.h
diff options
context:
space:
mode:
Diffstat (limited to 'dynamic.h')
-rw-r--r--dynamic.h108
1 files changed, 108 insertions, 0 deletions
diff --git a/dynamic.h b/dynamic.h
new file mode 100644
index 0000000..90744df
--- /dev/null
+++ b/dynamic.h
@@ -0,0 +1,108 @@
+#ifndef INCLUDE_BLASSIC_DYNAMIC_H
+#define INCLUDE_BLASSIC_DYNAMIC_H
+
+// dynamic.h
+// Revision 7-feb-2005
+
+
+#include "blassic.h"
+
+#include <string>
+
+//#if defined __WIN32__ || defined __CYGWIN__ || defined __MINGW32__
+
+#ifdef BLASSIC_USE_WINDOWS
+
+typedef __declspec (dllimport) int (* DynamicUsrFunc)
+ (int nparams, int * param);
+
+#else
+
+typedef int (* DynamicUsrFunc) (int nparams, int * param);
+
+#endif
+
+
+class DynamicHandle {
+public:
+ DynamicHandle ();
+ DynamicHandle (const std::string & name);
+ void assign (const std::string & name);
+ ~DynamicHandle ();
+ DynamicUsrFunc addr (const std::string & str);
+private:
+ class Internal;
+ Internal * pin;
+};
+
+#if 0
+
+#if (defined __unix__ || defined __linux__ || defined __NetBSD__) && \
+ ! defined __CYGWIN__
+// Kylix defines only __linux__
+
+#ifdef __hpux__
+
+#include <dl.h>
+
+typedef shl_t DynamicHandle;
+
+inline DynamicHandle dynamicload (const std::string & str)
+ { return shl_load (str.c_str (), BIND_DEFERRED, 0); }
+
+inline void * dynamicaddr (DynamicHandle & handle, const std::string & str)
+{
+ void * value;
+ if (shl_findsym (& handle, str.c_str (), TYPE_UNDEFINED, & value) == 0)
+ return value;
+ else return NULL;
+}
+
+inline void dynamicclose (DynamicHandle handle)
+ { shl_unload (handle); }
+
+#else
+
+#include <dlfcn.h>
+
+typedef void * DynamicHandle;
+
+inline DynamicHandle dynamicload (const std::string & str)
+ { return dlopen (str.c_str (), RTLD_LAZY); }
+
+inline void * dynamicaddr (DynamicHandle handle, const std::string & str)
+ { return dlsym (handle, str.c_str () ); }
+
+inline void dynamicclose (DynamicHandle handle)
+ { dlclose (handle); }
+
+#endif
+
+#elif defined __WIN32__ || defined __CYGWIN__
+
+#include <windows.h>
+#undef min
+#undef max
+
+typedef HMODULE DynamicHandle;
+
+inline DynamicHandle dynamicload (const std::string & str)
+ { return LoadLibrary (str.c_str () ); }
+
+inline void * dynamicaddr (DynamicHandle handle, const std::string & str)
+{
+ return (void *) GetProcAddress (handle, str.c_str () );
+}
+
+inline void dynamicclose (DynamicHandle handle)
+ { FreeLibrary (handle); }
+
+#else
+ #error Unknown operating system
+#endif
+
+#endif
+
+#endif
+
+// Fin de dymanic.h
Un proyecto texto-plano.xyz