#include <rpc.h>
#include <rpcndr.h>

#ifndef _WTYPES_H
#define _WTYPES_H
#if __GNUC__ >=3
#pragma GCC system_header
#endif

#ifdef __cplusplus
extern "C" {
#endif

#define IID_NULL GUID_NULL
#define CLSID_NULL GUID_NULL
#define CBPCLIPDATA(d) ((d).cbSize-sizeof((d).ulClipFmt))
#define ROTFLAGS_REGISTRATIONKEEPSALIVE	0x01
#define ROTFLAGS_ALLOWANYCLIENT		0x02

#ifndef __BLOB_T_DEFINED /* also in winsock2.h */
#define __BLOB_T_DEFINED
typedef struct _BLOB {
    ULONG	cbSize;
    BYTE	*pBlobData;
} BLOB,*PBLOB,*LPBLOB;
#endif
typedef enum tagDVASPECT {
    DVASPECT_CONTENT=1,
    DVASPECT_THUMBNAIL=2,
    DVASPECT_ICON=4,
    DVASPECT_DOCPRINT=8
} DVASPECT;
typedef enum tagDVASPECT2 {
    DVASPECT_OPAQUE=16,
    DVASPECT_TRANSPARENT=32
} DVASPECT2;
typedef enum tagSTATFLAG {
    STATFLAG_DEFAULT=0,
    STATFLAG_NONAME=1
} STATFLAG;
typedef enum tagMEMCTX {
    MEMCTX_LOCAL=0,
    MEMCTX_TASK,
    MEMCTX_SHARED,
    MEMCTX_MACSYSTEM,
    MEMCTX_UNKNOWN=-1,
    MEMCTX_SAME=-2
} MEMCTX;
typedef enum tagMSHCTX {
    MSHCTX_LOCAL=0,
    MSHCTX_NOSHAREDMEM,
    MSHCTX_DIFFERENTMACHINE,
    MSHCTX_INPROC,
    MSHCTX_CROSSCTX
} MSHCTX;
typedef enum tagCLSCTX {
    CLSCTX_INPROC_SERVER=1,CLSCTX_INPROC_HANDLER=2,CLSCTX_LOCAL_SERVER=4,
    CLSCTX_INPROC_SERVER16=8,CLSCTX_REMOTE_SERVER=16
} CLSCTX;
typedef enum tagMSHLFLAGS {
    MSHLFLAGS_NORMAL,MSHLFLAGS_TABLESTRONG,MSHLFLAGS_TABLEWEAK
} MSHLFLAGS;
typedef struct _FLAGGED_WORD_BLOB {
    unsigned long fFlags;
    unsigned long clSize;
    unsigned short asData[1];
}FLAGGED_WORD_BLOB;

#ifndef OLE2ANSI
typedef WCHAR OLECHAR;
typedef LPWSTR LPOLESTR;
typedef LPCWSTR LPCOLESTR;
#define OLESTR(s) L##s
#else
typedef char OLECHAR;
typedef LPSTR LPOLESTR;
typedef LPCSTR LPCOLESTR;
#define OLESTR(s) s
#endif
typedef unsigned short VARTYPE;
typedef short VARIANT_BOOL;
typedef VARIANT_BOOL _VARIANT_BOOL;
#define VARIANT_TRUE ((VARIANT_BOOL)0xffff)
#define VARIANT_FALSE ((VARIANT_BOOL)0)
typedef OLECHAR *BSTR;
typedef FLAGGED_WORD_BLOB *wireBSTR;
typedef BSTR *LPBSTR;
typedef LONG SCODE;
typedef void *HCONTEXT;
typedef union tagCY {
    _ANONYMOUS_STRUCT struct {
        unsigned long Lo;
        long Hi;
    }_STRUCT_NAME(s);
    LONGLONG int64;
} CY;
typedef double DATE;
typedef struct  tagBSTRBLOB {
    ULONG cbSize;
    PBYTE pData;
}BSTRBLOB;
typedef struct tagBSTRBLOB *LPBSTRBLOB;
typedef struct tagCLIPDATA {
    ULONG cbSize;
    long ulClipFmt;
    PBYTE pClipData;
}CLIPDATA;
typedef enum tagSTGC {
    STGC_DEFAULT,STGC_OVERWRITE,STGC_ONLYIFCURRENT,
    STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE
}STGC;
typedef enum tagSTGMOVE {
    STGMOVE_MOVE,STGMOVE_COPY,STGMOVE_SHALLOWCOPY
}STGMOVE;
enum VARENUM {
    VT_EMPTY,VT_NULL,VT_I2,VT_I4,VT_R4,VT_R8,VT_CY,VT_DATE,VT_BSTR,VT_DISPATCH,
    VT_ERROR,VT_BOOL,VT_VARIANT,VT_UNKNOWN,VT_DECIMAL,VT_I1=16,VT_UI1,VT_UI2,VT_UI4,VT_I8,
    VT_UI8,VT_INT,VT_UINT,VT_VOID,VT_HRESULT,VT_PTR,VT_SAFEARRAY,VT_CARRAY,VT_USERDEFINED,
    VT_LPSTR,VT_LPWSTR,VT_RECORD=36,VT_INT_PTR=37,VT_UINT_PTR=38,VT_FILETIME=64,VT_BLOB,VT_STREAM,VT_STORAGE,VT_STREAMED_OBJECT,
    VT_STORED_OBJECT,VT_BLOB_OBJECT,VT_CF,VT_CLSID,VT_BSTR_BLOB=0xfff,VT_VECTOR=0x1000,
    VT_ARRAY=0x2000,VT_BYREF=0x4000,VT_RESERVED=0x8000,VT_ILLEGAL= 0xffff,VT_ILLEGALMASKED=0xfff,
    VT_TYPEMASK=0xfff
};

typedef struct _BYTE_SIZEDARR {
    unsigned long clSize;
    byte *pData;
}BYTE_SIZEDARR;
typedef struct _SHORT_SIZEDARR {
    unsigned long clSize;
    unsigned short *pData;
}WORD_SIZEDARR;
typedef struct _LONG_SIZEDARR {
    unsigned long clSize;
    unsigned long *pData;
}DWORD_SIZEDARR;
typedef struct _HYPER_SIZEDARR {
    unsigned long clSize;
    hyper *pData;
}HYPER_SIZEDARR;
typedef double DOUBLE;
typedef struct tagDEC {
    USHORT wReserved;
    _ANONYMOUS_UNION union {
        _ANONYMOUS_STRUCT struct {
            BYTE scale;
            BYTE sign;
        }_STRUCT_NAME(s);
        USHORT signscale;
    } DUMMYUNIONNAME;
    ULONG Hi32;
    _ANONYMOUS_UNION union {
        _ANONYMOUS_STRUCT struct {
            ULONG Lo32;
            ULONG Mid32;
        }_STRUCT_NAME(s2);
        ULONGLONG Lo64;
    } DUMMYUNIONNAME2;
} DECIMAL;
typedef DECIMAL *LPDECIMAL;
#define DECIMAL_NEG ((BYTE)0x80)
#ifdef NONAMELESSUNION
#define DECIMAL_SETZERO(d) {(d).DUMMYUNIONNAME2.Lo64=(d).Hi32=(d).DUMMYUNIONNAME.signscale=0;}
#else
#define DECIMAL_SETZERO(d) {(d).Lo64=(d).Hi32=(d).signscale=0;}
#endif
typedef void *HMETAFILEPICT;
#ifdef __cplusplus
}
#endif
#endif
