BaseTyps.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:8k
- //+---------------------------------------------------------------------------
- //
- // Microsoft Windows
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //
- // File: basetyps.h
- //
- //----------------------------------------------------------------------------
- #if !defined( _BASETYPS_H_ )
- #define _BASETYPS_H_
- #if _MSC_VER > 1000
- #pragma once
- #endif
- // 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 STDMETHODV(method) virtual HRESULT STDMETHODVCALLTYPE method
- #define STDMETHODV_(type,method) virtual type STDMETHODVCALLTYPE method
- #define PURE = 0
- #define THIS_
- #define THIS void
- #define DECLARE_INTERFACE(iface) interface DECLSPEC_NOVTABLE iface
- #define DECLARE_INTERFACE_(iface, baseiface) interface DECLSPEC_NOVTABLE iface : public baseiface
- #else
- #define interface struct
- #define STDMETHOD(method) HRESULT (STDMETHODCALLTYPE * method)
- #define STDMETHOD_(type,method) type (STDMETHODCALLTYPE * method)
- #define STDMETHODV(method) HRESULT (STDMETHODVCALLTYPE * method)
- #define STDMETHODV_(type,method) type (STDMETHODVCALLTYPE * 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
- #include <guiddef.h>
- #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
- #endif