⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d3drmbas.h

📁 WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
💻 H
字号:
/*
 * D3DRMBase.h
 *
 * Portability file; defines simple COM layer for non-Windows platforms
 *
 */

#ifndef __ID3DRMBASE_H__
#define __ID3DRMBASE_H__

#ifdef WIN32

#include <objbase.h> /* Use Windows header files */
#define VIRTUAL

#else /* No Windows platform */

/* define HRESULT status values */
#define SEVERITY_SUCCESS    0
#define SEVERITY_ERROR      1

#define SUCCEEDED(Status)	((HRESULT)(Status) >= 0)
#define FAILED(Status)		((HRESULT)(Status)<0)
#define IS_ERROR(Status)	((unsigned long)(Status) >> 31 == SEVERITY_ERROR)
#define HRESULT_CODE(hr)	((hr) & 0xFFFF)
#define HRESULT_FACILITY(hr)	(((hr) >> 16) & 0x1fff)
#define HRESULT_SEVERITY(hr)	(((hr) >> 31) & 0x1)

/* build an HRESULT from a severity, a facility, and a result code */
#define MAKE_HRESULT(sev,fac,code) \
    ((HRESULT) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))) )

#if defined(__cplusplus)
#define EXTERN_C    extern "C"
#else
#define EXTERN_C    extern
#endif

/* calling conventions */
#define STDMETHODCALLTYPE	/* __stdcall */
#define STDMETHODVCALLTYPE	/* __cdecl */
#define STDAPICALLTYPE		/* __stdcall */
#define STDAPIVCALLTYPE		/* __cdecl */
#define FAR

#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

/* typedef some standard Windows-type types */

typedef signed long LONG, *LPLONG, DWORD, *LPDWORD, HRESULT;
typedef unsigned long ULONG, *LPULONG;
typedef signed short WORD, *LPWORD;
typedef unsigned int BOOL, *LPBOOL;
typedef signed char BYTE, CHAR, *LPCHAR;
typedef unsigned char UCHAR;
typedef void VOID, *LPVOID;

#ifndef INITGUID
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
    EXTERN_C const GUID CDECL FAR name
#else
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
    EXTERN_C const GUID CDECL name = \
	{l, w1, w2, {b1, b2,  b3,  b4,  b5,  b6,  b7,  b8}}
#endif /* INITGUID */

typedef struct _GUID /* unique ID code for COM class */
{   DWORD Data1;
    WORD Data2;
    WORD Data3;
    BYTE Data4[8];
} GUID, IID, FAR *REFIID;

/****** 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: 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
#define STDMETHOD(method)       virtual HRESULT STDMETHODCALLTYPE method
#define STDMETHOD_(type,method) virtual type STDMETHODCALLTYPE method
#define PURE                    = 0
#define VIRTUAL
#define THIS_
#define THIS                    void
#define DECLARE_INTERFACE(iface)    interface iface
#define DECLARE_INTERFACE_(iface, baseiface)    interface iface : public baseiface

#else /* C Interface */

#define interface               struct
#define STDMETHOD(method)       HRESULT (STDMETHODCALLTYPE * method)
#define STDMETHOD_(type,method) type (STDMETHODCALLTYPE * method)

#ifdef __MWERKS__ /* Metrowerks compiler */
#define PURE ; int : 32 /* pad to match C++ vtable */
#define VIRTUAL ; int : 32
#else
#define PURE
#define VIRTUAL
#endif

#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 /* !CONST_VTABLE */

#define DECLARE_INTERFACE(iface)    typedef interface iface { \
				    struct iface##Vtbl FAR* lpVtbl; \
				} iface; \
				typedef struct iface##Vtbl iface##Vtbl; \
				struct iface##Vtbl
#endif /* CONST_VTABLE */

#define DECLARE_INTERFACE_(iface, baseiface)    DECLARE_INTERFACE(iface)

#endif /* C Interface */
#endif /* No Windows Interface */
#endif /* _ID3DBASE_H_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -