summaryrefslogtreecommitdiffstats
path: root/public/sdk/inc/basetyps.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/sdk/inc/basetyps.h')
-rw-r--r--public/sdk/inc/basetyps.h240
1 files changed, 240 insertions, 0 deletions
diff --git a/public/sdk/inc/basetyps.h b/public/sdk/inc/basetyps.h
new file mode 100644
index 000000000..6fdb1985b
--- /dev/null
+++ b/public/sdk/inc/basetyps.h
@@ -0,0 +1,240 @@
+//+---------------------------------------------------------------------------
+//
+// Microsoft Windows
+// Copyright (C) Microsoft Corporation, 1992-1996.
+//
+// File: basetyps.h
+//
+//----------------------------------------------------------------------------
+#if !defined( _BASETYPS_H_ )
+#define _BASETYPS_H_
+
+// Common macros gleamed from COMPOBJ.H
+
+#ifdef __cplusplus
+ #define EXTERN_C extern "C"
+#else
+ #define EXTERN_C extern
+#endif
+
+#ifdef _WIN32
+
+// Win32 doesn't support __export
+
+#define STDMETHODCALLTYPE __stdcall
+#define STDMETHODVCALLTYPE __cdecl
+
+#define STDAPICALLTYPE __stdcall
+#define STDAPIVCALLTYPE __cdecl
+
+#else
+
+#define STDMETHODCALLTYPE __export __stdcall
+#define STDMETHODVCALLTYPE __export __cdecl
+
+#define STDAPICALLTYPE __export __stdcall
+#define STDAPIVCALLTYPE __export __cdecl
+
+#endif
+
+#define STDAPI EXTERN_C HRESULT STDAPICALLTYPE
+#define STDAPI_(type) EXTERN_C type STDAPICALLTYPE
+
+#define STDMETHODIMP HRESULT STDMETHODCALLTYPE
+#define STDMETHODIMP_(type) type STDMETHODCALLTYPE
+
+// The 'V' versions allow Variable Argument lists.
+
+#define STDAPIV EXTERN_C HRESULT STDAPIVCALLTYPE
+#define STDAPIV_(type) EXTERN_C type STDAPIVCALLTYPE
+
+#define STDMETHODIMPV HRESULT STDMETHODVCALLTYPE
+#define STDMETHODIMPV_(type) type STDMETHODVCALLTYPE
+
+
+
+
+/****** Interface Declaration ***********************************************/
+
+/*
+ * These are macros for declaring interfaces. They exist so that
+ * a single definition of the interface is simulataneously a proper
+ * declaration of the interface structures (C++ abstract classes)
+ * for both C and C++.
+ *
+ * DECLARE_INTERFACE(iface) is used to declare an interface that does
+ * not derive from a base interface.
+ * DECLARE_INTERFACE_(iface, baseiface) is used to declare an interface
+ * that does derive from a base interface.
+ *
+ * By default if the source file has a .c extension the C version of
+ * the interface declaratations will be expanded; if it has a .cpp
+ * extension the C++ version will be expanded. if you want to force
+ * the C version expansion even though the source file has a .cpp
+ * extension, then define the macro "CINTERFACE".
+ * eg. cl -DCINTERFACE file.cpp
+ *
+ * Example Interface declaration:
+ *
+ * #undef INTERFACE
+ * #define INTERFACE IClassFactory
+ *
+ * DECLARE_INTERFACE_(IClassFactory, IUnknown)
+ * {
+ * // *** IUnknown methods ***
+ * STDMETHOD(QueryInterface) (THIS_
+ * REFIID riid,
+ * LPVOID FAR* ppvObj) PURE;
+ * STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ * STDMETHOD_(ULONG,Release) (THIS) PURE;
+ *
+ * // *** IClassFactory methods ***
+ * STDMETHOD(CreateInstance) (THIS_
+ * LPUNKNOWN pUnkOuter,
+ * REFIID riid,
+ * LPVOID FAR* ppvObject) PURE;
+ * };
+ *
+ * Example C++ expansion:
+ *
+ * struct FAR IClassFactory : public IUnknown
+ * {
+ * virtual HRESULT STDMETHODCALLTYPE QueryInterface(
+ * IID FAR& riid,
+ * LPVOID FAR* ppvObj) = 0;
+ * virtual HRESULT STDMETHODCALLTYPE AddRef(void) = 0;
+ * virtual HRESULT STDMETHODCALLTYPE Release(void) = 0;
+ * virtual HRESULT STDMETHODCALLTYPE CreateInstance(
+ * LPUNKNOWN pUnkOuter,
+ * IID FAR& riid,
+ * LPVOID FAR* ppvObject) = 0;
+ * };
+ *
+ * NOTE: Our documentation says '#define interface class' but we use
+ * 'struct' instead of 'class' to keep a lot of 'public:' lines
+ * out of the interfaces. The 'FAR' forces the 'this' pointers to
+ * be far, which is what we need.
+ *
+ * Example C expansion:
+ *
+ * typedef struct IClassFactory
+ * {
+ * const struct IClassFactoryVtbl FAR* lpVtbl;
+ * } IClassFactory;
+ *
+ * typedef struct IClassFactoryVtbl IClassFactoryVtbl;
+ *
+ * struct IClassFactoryVtbl
+ * {
+ * HRESULT (STDMETHODCALLTYPE * QueryInterface) (
+ * IClassFactory FAR* This,
+ * IID FAR* riid,
+ * LPVOID FAR* ppvObj) ;
+ * HRESULT (STDMETHODCALLTYPE * AddRef) (IClassFactory FAR* This) ;
+ * HRESULT (STDMETHODCALLTYPE * Release) (IClassFactory FAR* This) ;
+ * HRESULT (STDMETHODCALLTYPE * CreateInstance) (
+ * IClassFactory FAR* This,
+ * LPUNKNOWN pUnkOuter,
+ * IID FAR* riid,
+ * LPVOID FAR* ppvObject);
+ * HRESULT (STDMETHODCALLTYPE * LockServer) (
+ * IClassFactory FAR* This,
+ * BOOL fLock);
+ * };
+ */
+
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+//#define interface struct FAR
+#define interface struct
+#define STDMETHOD(method) virtual HRESULT STDMETHODCALLTYPE method
+#define STDMETHOD_(type,method) virtual type STDMETHODCALLTYPE method
+#define PURE = 0
+#define THIS_
+#define THIS void
+#define DECLARE_INTERFACE(iface) interface iface
+#define DECLARE_INTERFACE_(iface, baseiface) interface iface : public baseiface
+
+
+
+#else
+
+#define interface struct
+
+#define STDMETHOD(method) HRESULT (STDMETHODCALLTYPE * method)
+#define STDMETHOD_(type,method) type (STDMETHODCALLTYPE * method)
+
+
+
+
+#define PURE
+#define THIS_ INTERFACE FAR* This,
+#define THIS INTERFACE FAR* This
+#ifdef CONST_VTABLE
+#define DECLARE_INTERFACE(iface) typedef interface iface { \
+ const struct iface##Vtbl FAR* lpVtbl; \
+ } iface; \
+ typedef const struct iface##Vtbl iface##Vtbl; \
+ const struct iface##Vtbl
+#else
+#define DECLARE_INTERFACE(iface) typedef interface iface { \
+ struct iface##Vtbl FAR* lpVtbl; \
+ } iface; \
+ typedef struct iface##Vtbl iface##Vtbl; \
+ struct iface##Vtbl
+#endif
+#define DECLARE_INTERFACE_(iface, baseiface) DECLARE_INTERFACE(iface)
+
+#endif
+
+// macros to define byte pattern for a GUID.
+// Example: DEFINE_GUID(GUID_XXX, a, b, c, ...);
+//
+// Each dll/exe must initialize the GUIDs once. This is done in one of
+// two ways. If you are not using precompiled headers for the file(s) which
+// initializes the GUIDs, define INITGUID before including compobj.h. This
+// is how OLE builds the initialized versions of the GUIDs which are included
+// in ole2.lib. The GUIDs in ole2.lib are all defined in the same text
+// segment GUID_TEXT.
+//
+// The alternative (which some versions of the compiler don't handle properly;
+// they wind up with the initialized GUIDs in a data, not a text segment),
+// is to use a precompiled version of compobj.h and then include initguid.h
+// after compobj.h followed by one or more of the guid defintion files.
+
+#ifndef INITGUID
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ EXTERN_C const GUID FAR name
+#else
+
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ EXTERN_C const GUID name \
+ = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
+#endif // INITGUID
+
+#define DEFINE_OLEGUID(name, l, w1, w2) \
+ DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)
+
+#ifndef _ERROR_STATUS_T_DEFINED
+typedef unsigned long error_status_t;
+#define _ERROR_STATUS_T_DEFINED
+#endif
+
+#ifndef _WCHAR_T_DEFINED
+typedef unsigned short wchar_t;
+#define _WCHAR_T_DEFINED
+#endif
+
+#ifndef GUID_DEFINED
+#define GUID_DEFINED
+typedef struct _GUID
+{
+ unsigned long Data1;
+ unsigned short Data2;
+ unsigned short Data3;
+ unsigned char Data4[8];
+} GUID;
+#endif /* GUID_DEFINED */
+
+#endif
+