Jacek Caban : include: Added macros for __uuidof emulation based on C++ templates.
Alexandre Julliard
julliard at winehq.org
Fri Jul 15 11:45:11 CDT 2011
Module: wine
Branch: master
Commit: a8c75ad4c6637aa85834d0bff224586e3a7d4229
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a8c75ad4c6637aa85834d0bff224586e3a7d4229
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu Jul 14 17:21:11 2011 +0200
include: Added macros for __uuidof emulation based on C++ templates.
---
include/guiddef.h | 26 ++++++++++++++++++++++++++
1 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/include/guiddef.h b/include/guiddef.h
index f079983..ba8e8cf 100644
--- a/include/guiddef.h
+++ b/include/guiddef.h
@@ -29,6 +29,32 @@ typedef struct _GUID
unsigned short Data3;
unsigned char Data4[ 8 ];
} GUID;
+
+/* Macros for __uuidof emulation */
+#if defined(__cplusplus) && !defined(_MSC_VER)
+
+extern "C++" {
+ template<typename T> const GUID &__wine_uuidof();
+}
+
+#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+ extern "C++" { \
+ template<> inline const GUID &__wine_uuidof<type>() { \
+ return (const IID){l,w1,w2, {b1,b2,b3,b4,b5,b6,b7,b8}}; \
+ } \
+ template<> inline const GUID &__wine_uuidof<type*>() { \
+ return __wine_uuidof<type>(); \
+ } \
+ }
+
+#define __uuidof(type) __wine_uuidof<typeof(type)>()
+
+#else
+
+#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
+
+#endif
+
#endif
#undef DEFINE_GUID
More information about the wine-cvs
mailing list