diff options
author | npmccallum <npmccallum@c587cffe-e639-0410-9787-d7902ae8ed56> | 2010-02-15 16:22:15 +0000 |
---|---|---|
committer | npmccallum <npmccallum@c587cffe-e639-0410-9787-d7902ae8ed56> | 2010-02-15 16:22:15 +0000 |
commit | 588542c1d39b9ba588d7d2f20d2e19048fc50bc8 (patch) | |
tree | ac02b0d5e256f7c95d5b405cf3a276479d9f4804 /libmodman/module.hpp | |
parent | 99eb2deffd8fbee928111a8a8a7a912d0c2d15fc (diff) | |
download | libproxy-588542c1d39b9ba588d7d2f20d2e19048fc50bc8.tar.gz |
enable lazy loading on win32
git-svn-id: http://libproxy.googlecode.com/svn/trunk@551 c587cffe-e639-0410-9787-d7902ae8ed56
Diffstat (limited to 'libmodman/module.hpp')
-rw-r--r-- | libmodman/module.hpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/libmodman/module.hpp b/libmodman/module.hpp index f908c00..37f4a20 100644 --- a/libmodman/module.hpp +++ b/libmodman/module.hpp @@ -27,6 +27,7 @@ #define __MM_DLL_EXPORT __declspec(dllexport) #define __MM_FUNC_DEF_PREFIX extern "C" __MM_DLL_EXPORT #define __MM_SCLR_DEF_PREFIX extern "C" __MM_DLL_EXPORT +template <class T> static const char* __mm_get_type_name() { return __FUNCSIG__; } #else #define __MM_DLL_EXPORT __attribute__ ((visibility("default"))) #define __MM_FUNC_DEF_PREFIX __MM_DLL_EXPORT @@ -34,12 +35,10 @@ #endif #define MM_MODULE_VERSION 1 - #define MM_MODULE_VARNAME(name) __mm_ ## name #define MM_MODULE_INIT(mtype, minit) \ - template <class T> static const char* mtype ## _type() { return T::base_type(); } \ __MM_SCLR_DEF_PREFIX const unsigned int MM_MODULE_VARNAME(vers) = MM_MODULE_VERSION; \ - __MM_FUNC_DEF_PREFIX const char* (*MM_MODULE_VARNAME(type))() = mtype ## _type<mtype>; \ + __MM_FUNC_DEF_PREFIX const char* (*MM_MODULE_VARNAME(type))() = mtype::base_type; \ __MM_FUNC_DEF_PREFIX base_extension** (*MM_MODULE_VARNAME(init))() = minit; #define MM_MODULE_TEST(mtest) \ __MM_FUNC_DEF_PREFIX bool (*MM_MODULE_VARNAME(test))() = mtest; @@ -63,7 +62,13 @@ namespace libmodman { class __MM_DLL_EXPORT base_extension { public: - static const char* base_type() { return typeid(base_extension).name(); } + static const char* base_type() { +#ifdef WIN32 + return __mm_get_type_name<base_extension>(); +#else + return typeid(base_extension).name(); +#endif + } static bool singleton(); virtual ~base_extension(); @@ -73,7 +78,14 @@ public: template <class T> class __MM_DLL_EXPORT extension : public base_extension { public: - static const char* base_type() { return typeid(T).name(); } + static const char* base_type() { +#ifdef WIN32 + return __mm_get_type_name<T>(); +#else + return typeid(T).name(); +#endif + + } }; } |