MONO_BEGIN_DECLS
/* VS 2010 and later have stdint.h */
-#if defined(_MSC_VER) && _MSC_VER < 1600
+#if defined(_MSC_VER)
+
+#if _MSC_VER < 1600
typedef __int8 int8_t;
typedef unsigned __int8 uint8_t;
#include <stdint.h>
+#endif
+
+#define MONO_API_EXPORT __declspec(dllexport)
+#define MONO_API_IMPORT __declspec(dllimport)
+
+#else
+
+#include <stdint.h>
+
+#ifdef __GNUC__
+#define MONO_API_EXPORT __attribute__ ((visibility ("default")))
+#else
+#define MONO_API_EXPORT
+#endif
+#define MONO_API_IMPORT
+
#endif /* end of compiler-specific stuff */
+#if defined(MONO_DLL_EXPORT)
+ #define MONO_API MONO_API_EXPORT
+#elif defined(MONO_DLL_IMPORT)
+ #define MONO_API MONO_API_IMPORT
+#else
+ #define MONO_API
+#endif
+
typedef int32_t mono_bool;
typedef uint8_t mono_byte;
typedef uint16_t mono_unichar2;
+typedef uint32_t mono_unichar4;
typedef void (*MonoFunc) (void* data, void* user_data);
typedef void (*MonoHFunc) (void* key, void* value, void* user_data);
-void mono_free (void *);
+MONO_API void mono_free (void *);
#define MONO_CONST_RETURN const
+
+#if defined (MONO_INSIDE_RUNTIME)
+
+#if defined (__clang__)
+#define MONO_RT_EXTERNAL_ONLY __attribute__ ((unavailable("The mono runtime must not call this function")))
+#elif defined (__GNUC__)
+#define MONO_RT_EXTERNAL_ONLY __attribute__ ((error("The mono runtime must not call this function")))
+#else
+#define MONO_RT_EXTERNAL_ONLY
+#endif /* __clang__ */
+
+#else
+#define MONO_RT_EXTERNAL_ONLY
+#endif /* MONO_INSIDE_RUNTIME */
+
+
MONO_END_DECLS
#endif /* __MONO_PUBLIB_H__ */