/* * Basic types used by COM interfaces * * Copyright 2002 Ove Kaaven * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "basetsd.h"; import "guiddef.h"; cpp_quote("#ifndef __wtypes_h__") cpp_quote("#define __wtypes_h__") cpp_quote("#endif") cpp_quote("#ifdef _MSC_VER") cpp_quote("#pragma warning(push)") cpp_quote("#pragma warning(disable:4201)") cpp_quote("#pragma warning(disable:4820)") cpp_quote("#endif") [ uuid(D3980A60-910C-1068-9341-00DD010F2F1C), version(0.1), pointer_default(unique) ] interface IWinTypes { /******************** BASIC WIN32 TYPES ********************/ cpp_quote("#if 0 /* winnt.h */") /* don't redefine these */ typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned long DWORD; typedef long BOOL; typedef unsigned char UCHAR; typedef int INT; typedef unsigned int UINT; typedef short SHORT; typedef unsigned short USHORT; typedef long LONG; typedef unsigned long ULONG; typedef float FLOAT; typedef void *PVOID, *LPVOID; typedef DWORD *LPDWORD; typedef char CHAR; typedef [string] CHAR *LPSTR; typedef [string] const CHAR *LPCSTR; typedef wchar_t WCHAR; typedef [string] WCHAR *LPWSTR; typedef [string] const WCHAR *LPCWSTR; typedef boolean BOOLEAN; typedef DWORD COLORREF; typedef void *HANDLE; #define DECLARE_HANDLE(name) typedef void *name #define DECLARE_WIREM_HANDLE(name) typedef [wire_marshal(wire##name)] void*name DECLARE_HANDLE(HMODULE); DECLARE_HANDLE(HINSTANCE); DECLARE_HANDLE(HRGN); DECLARE_HANDLE(HTASK); DECLARE_HANDLE(HKEY); DECLARE_HANDLE(HDESK); DECLARE_HANDLE(HMF); DECLARE_HANDLE(HEMF); DECLARE_HANDLE(HPEN); DECLARE_HANDLE(HRSRC); DECLARE_HANDLE(HSTR); DECLARE_HANDLE(HWINSTA); DECLARE_HANDLE(HKL); DECLARE_HANDLE(HGDIOBJ); typedef HANDLE HDWP; typedef LONG_PTR LRESULT; typedef LONG HRESULT; typedef DWORD LCID; typedef USHORT LANGID; typedef unsigned __int64 DWORDLONG; typedef __int64 LONGLONG; typedef unsigned __int64 ULONGLONG; typedef struct _LARGE_INTEGER { LONGLONG QuadPart; } LARGE_INTEGER; typedef struct _ULARGE_INTEGER { ULONGLONG QuadPart; } ULARGE_INTEGER; typedef struct _SID_IDENTIFIER_AUTHORITY { UCHAR Value[6]; } SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY; typedef struct _SID { UCHAR Revision; UCHAR SubAuthorityCount; SID_IDENTIFIER_AUTHORITY IdentifierAuthority; [size_is(SubAuthorityCount)] ULONG SubAuthority[*]; } SID, *PSID; typedef USHORT SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL; typedef struct _ACL { UCHAR AclRevision; UCHAR Sbz1; USHORT AclSize; USHORT AceCount; USHORT Sbz2; } ACL; typedef ACL *PACL; typedef struct _SECURITY_DESCRIPTOR { UCHAR Revision; UCHAR Sbz1; SECURITY_DESCRIPTOR_CONTROL Control; PSID Owner; PSID Group; PACL Sacl; PACL Dacl; } SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR; typedef struct _SECURITY_ATTRIBUTES { DWORD nLength; [size_is(nLength)] LPVOID lpSecurityDescriptor; BOOL bInheritHandle; } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES; typedef struct tagSIZE { LONG cx; LONG cy; } SIZE, *PSIZE, *LPSIZE; typedef SIZE SIZEL, *PSIZEL, *LPSIZEL; typedef struct tagPOINT { LONG x; LONG y; } POINT, *PPOINT, *LPPOINT; typedef struct _POINTL { LONG x; LONG y; } POINTL, *PPOINTL; typedef struct tagRECT { LONG left; LONG top; LONG right; LONG bottom; } RECT, *PRECT, *LPRECT; typedef const RECT *LPCRECT; typedef struct _RECTL { LONG left; LONG top; LONG right; LONG bottom; } RECTL, *PRECTL, *LPRECTL; typedef const RECTL *LPCRECTL; typedef UINT_PTR WPARAM; typedef LONG_PTR LPARAM; cpp_quote("#endif /* winnt.h */") cpp_quote("#ifdef _MSC_VER") /* for IDL and MSVC only */ typedef double DOUBLE; cpp_quote("#else") cpp_quote("typedef double DECLSPEC_ALIGN(8) DOUBLE;") cpp_quote("#endif") cpp_quote("#ifndef _PALETTEENTRY_DEFINED") cpp_quote("#define _PALETTEENTRY_DEFINED") typedef struct tagPALETTEENTRY { BYTE peRed; BYTE peGreen; BYTE peBlue; BYTE peFlags; } PALETTEENTRY, *PPALETTEENTRY, *LPPALETTEENTRY; cpp_quote("#endif") cpp_quote("#ifndef _LOGPALETTE_DEFINED") cpp_quote("#define _LOGPALETTE_DEFINED") typedef struct tagLOGPALETTE { WORD palVersion; WORD palNumEntries; [size_is(palNumEntries)] PALETTEENTRY palPalEntry[*]; } LOGPALETTE, *PLOGPALETTE, *LPLOGPALETTE; cpp_quote("#endif") cpp_quote("#ifndef _SYSTEMTIME_") cpp_quote("#define _SYSTEMTIME_") typedef struct _SYSTEMTIME{ WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay; WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds; } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME; cpp_quote("#endif") cpp_quote("#ifndef _FILETIME_") cpp_quote("#define _FILETIME_") typedef struct _FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime; } FILETIME, *PFILETIME, *LPFILETIME; cpp_quote("#endif") cpp_quote("#ifndef _TEXTMETRIC_DEFINED") cpp_quote("#define _TEXTMETRIC_DEFINED") typedef struct tagTEXTMETRICA { LONG tmHeight; LONG tmAscent; LONG tmDescent; LONG tmInternalLeading; LONG tmExternalLeading; LONG tmAveCharWidth; LONG tmMaxCharWidth; LONG tmWeight; LONG tmOverhang; LONG tmDigitizedAspectX; LONG tmDigitizedAspectY; BYTE tmFirstChar; BYTE tmLastChar; BYTE tmDefaultChar; BYTE tmBreakChar; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; BYTE tmPitchAndFamily; BYTE tmCharSet; } TEXTMETRICA, *LPTEXTMETRICA, *PTEXTMETRICA; typedef struct tagTEXTMETRICW { LONG tmHeight; LONG tmAscent; LONG tmDescent; LONG tmInternalLeading; LONG tmExternalLeading; LONG tmAveCharWidth; LONG tmMaxCharWidth; LONG tmWeight; LONG tmOverhang; LONG tmDigitizedAspectX; LONG tmDigitizedAspectY; WCHAR tmFirstChar; WCHAR tmLastChar; WCHAR tmDefaultChar; WCHAR tmBreakChar; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; BYTE tmPitchAndFamily; BYTE tmCharSet; } TEXTMETRICW, *LPTEXTMETRICW, *PTEXTMETRICW; cpp_quote("#endif") /******************** BASIC COM/OLE TYPES ********************/ typedef WCHAR OLECHAR; typedef [string] OLECHAR *LPOLESTR; typedef [string] const OLECHAR *LPCOLESTR; cpp_quote("#ifndef __WINESRC__") cpp_quote("#define OLESTR(str) L##str") cpp_quote("#endif") typedef LONG SCODE; typedef struct _COAUTHIDENTITY { [size_is(UserLength+1)] USHORT *User; ULONG UserLength; [size_is(DomainLength+1)] USHORT *Domain; ULONG DomainLength; [size_is(PasswordLength+1)] USHORT *Password; ULONG PasswordLength; ULONG Flags; } COAUTHIDENTITY; typedef struct _COAUTHINFO { DWORD dwAuthnSvc; DWORD dwAuthzSvc; LPWSTR pwszServerPrincName; DWORD dwAuthnLevel; DWORD dwImpersonationLevel; COAUTHIDENTITY *pAuthIdentityData; DWORD dwCapabilities; } COAUTHINFO; typedef enum tagMEMCTX { MEMCTX_TASK = 1, MEMCTX_SHARED = 2, MEMCTX_MACSYSTEM = 3, MEMCTX_UNKNOWN = -1, MEMCTX_SAME = -2 } MEMCTX; cpp_quote("#ifndef _ROT_COMPARE_MAX_DEFINED") cpp_quote("#define _ROT_COMPARE_MAX_DEFINED") cpp_quote("#define ROT_COMPARE_MAX 2048") cpp_quote("#endif") cpp_quote("#ifndef _ROTFLAGS_DEFINED") cpp_quote("#define _ROTFLAGS_DEFINED") cpp_quote("#define ROTFLAGS_REGISTRATIONKEEPSALIVE 0x1") cpp_quote("#define ROTFLAGS_ALLOWANYCLIENT 0x2") cpp_quote("#endif") typedef enum tagCLSCTX { CLSCTX_INPROC_SERVER = 0x1, CLSCTX_INPROC_HANDLER = 0x2, CLSCTX_LOCAL_SERVER = 0x4, CLSCTX_INPROC_SERVER16 = 0x8, CLSCTX_REMOTE_SERVER = 0x10, CLSCTX_INPROC_HANDLER16 = 0x20, CLSCTX_INPROC_SERVERX86 = 0x40, CLSCTX_INPROC_HANDLERX86 = 0x80, CLSCTX_ESERVER_HANDLER = 0x100, CLSCTX_NO_CODE_DOWNLOAD = 0x400, CLSCTX_NO_CUSTOM_MARSHAL = 0x1000, CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000, CLSCTX_NO_FAILURE_LOG = 0x4000, CLSCTX_DISABLE_AAA = 0x8000, CLSCTX_ENABLE_AAA = 0x10000, CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000 } CLSCTX; cpp_quote("#define CLSCTX_INPROC (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER)") cpp_quote("#define CLSCTX_ALL (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)") cpp_quote("#define CLSCTX_SERVER (CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER)") typedef enum tagMSHLFLAGS { MSHLFLAGS_NORMAL = 0, MSHLFLAGS_TABLESTRONG = 1, MSHLFLAGS_TABLEWEAK = 2, MSHLFLAGS_NOPING = 4 } MSHLFLAGS; typedef enum tagMSHCTX { MSHCTX_LOCAL = 0, MSHCTX_NOSHAREDMEM = 1, MSHCTX_DIFFERENTMACHINE = 2, MSHCTX_INPROC = 3, MSHCTX_CROSSCTX = 4 } MSHCTX; /******************** BLOB TYPES ********************/ typedef struct _BYTE_BLOB { unsigned long clSize; [size_is(clSize)] byte abData[]; } BYTE_BLOB; typedef [unique] BYTE_BLOB *UP_BYTE_BLOB; typedef struct _FLAGGED_BYTE_BLOB { unsigned long fFlags; unsigned long clSize; [size_is(clSize)] byte abData[]; } FLAGGED_BYTE_BLOB; typedef [unique] FLAGGED_BYTE_BLOB *UP_FLAGGED_BYTE_BLOB; typedef struct _FLAGGED_WORD_BLOB { unsigned long fFlags; unsigned long clSize; [size_is(clSize)] unsigned short asData[]; } FLAGGED_WORD_BLOB; typedef [unique] FLAGGED_WORD_BLOB *UP_FLAGGED_WORD_BLOB; typedef struct _BYTE_SIZEDARR { unsigned long clSize; [size_is(clSize)] byte *pData; } BYTE_SIZEDARR; typedef struct _SHORT_SIZEDARR { unsigned long clSize; [size_is(clSize)] unsigned short *pData; } WORD_SIZEDARR; typedef struct _LONG_SIZEDARR { unsigned long clSize; [size_is(clSize)] unsigned long *pData; } DWORD_SIZEDARR; typedef struct _HYPER_SIZEDARR { unsigned long clSize; [size_is(clSize)] hyper *pData; } HYPER_SIZEDARR; /******************** GDI TYPES ********************/ const unsigned long WDT_INPROC_CALL = 0x48746457; const unsigned long WDT_REMOTE_CALL = 0x52746457; const unsigned long WDT_INPROC64_CALL = 0x50746457; typedef union _userCLIPFORMAT switch(long fContext) u { case WDT_INPROC_CALL: DWORD dwValue; case WDT_REMOTE_CALL: LPWSTR pwszName; } userCLIPFORMAT; typedef [unique] userCLIPFORMAT *wireCLIPFORMAT; typedef [wire_marshal(wireCLIPFORMAT)] WORD CLIPFORMAT; typedef struct tagRemHGLOBAL { long fNullHGlobal; unsigned long cbData; [size_is(cbData)] byte data[]; } RemHGLOBAL; typedef union _userHGLOBAL switch(long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: FLAGGED_BYTE_BLOB *hRemote; case WDT_INPROC64_CALL: __int64 hInproc64; } userHGLOBAL; typedef [unique] userHGLOBAL *wireHGLOBAL; typedef struct tagRemHMETAFILEPICT { long mm; long xExt; long yExt; unsigned long cbData; [size_is(cbData)] byte data[]; } RemHMETAFILEPICT; typedef union _userHMETAFILE switch(long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: BYTE_BLOB *hRemote; case WDT_INPROC64_CALL: __int64 hInproc64; } userHMETAFILE; typedef [unique] userHMETAFILE *wireHMETAFILE; typedef struct _remoteMETAFILEPICT { long mm; long xExt; long yExt; userHMETAFILE *hMF; } remoteMETAFILEPICT; typedef union _userHMETAFILEPICT switch(long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: remoteMETAFILEPICT *hRemote; case WDT_INPROC64_CALL: __int64 hInproc64; } userHMETAFILEPICT; typedef [unique] userHMETAFILEPICT *wireHMETAFILEPICT; typedef struct tagRemHENHMETAFILE { unsigned long cbData; [size_is(cbData)] byte data[]; } RemHENHMETAFILE; typedef union _userHENHMETAFILE switch(long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: BYTE_BLOB *hRemote; case WDT_INPROC64_CALL: __int64 hInproc64; } userHENHMETAFILE; typedef [unique] userHENHMETAFILE *wireHENHMETAFILE; typedef struct tagRemHBITMAP { unsigned long cbData; [size_is(cbData)] byte data[]; } RemHBITMAP; typedef struct _userBITMAP { LONG bmType; LONG bmWidth; LONG bmHeight; LONG bmWidthBytes; WORD bmPlanes; WORD bmBitsPixel; ULONG cbSize; [size_is(cbSize)] byte pBuffer[]; } userBITMAP; typedef union _userHBITMAP switch(long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: userBITMAP *hRemote; case WDT_INPROC64_CALL: __int64 hInproc64; } userHBITMAP; typedef [unique] userHBITMAP *wireHBITMAP; typedef struct tagRemHPALETTE { unsigned long cbData; [size_is(cbData)] byte data[]; } RemHPALETTE; typedef struct tagrpcLOGPALETTE { WORD palVersion; WORD palNumEntries; [size_is(palNumEntries)] PALETTEENTRY palPalEntry[]; } rpcLOGPALETTE; typedef union _userHPALETTE switch(long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: rpcLOGPALETTE *hRemote; case WDT_INPROC64_CALL: __int64 hInproc64; } userHPALETTE; typedef [unique] userHPALETTE *wireHPALETTE; cpp_quote("#if 0") DECLARE_WIREM_HANDLE(HGLOBAL); typedef HGLOBAL HLOCAL; DECLARE_WIREM_HANDLE(HBITMAP); DECLARE_WIREM_HANDLE(HPALETTE); DECLARE_WIREM_HANDLE(HENHMETAFILE); DECLARE_WIREM_HANDLE(HMETAFILE); cpp_quote("#endif") DECLARE_WIREM_HANDLE(HMETAFILEPICT); typedef union _RemotableHandle switch (long fContext) u { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: long hRemote; } RemotableHandle; typedef [unique] RemotableHandle *wireHACCEL; typedef [unique] RemotableHandle *wireHBRUSH; typedef [unique] RemotableHandle *wireHDC; typedef [unique] RemotableHandle *wireHFONT; typedef [unique] RemotableHandle *wireHICON; typedef [unique] RemotableHandle *wireHMENU; typedef [unique] RemotableHandle *wireHWND; cpp_quote("#if 0") /* for IDL only (C/C++ defs are in windef.h) */ DECLARE_WIREM_HANDLE(HACCEL); DECLARE_WIREM_HANDLE(HBRUSH); DECLARE_WIREM_HANDLE(HDC); DECLARE_WIREM_HANDLE(HFONT); DECLARE_WIREM_HANDLE(HICON); DECLARE_WIREM_HANDLE(HMENU); DECLARE_WIREM_HANDLE(HWND); typedef HICON HCURSOR; typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG, *PMSG, *NPMSG, *LPMSG; cpp_quote("#endif") /******************** GUID TYPES ********************/ cpp_quote("#if 0") /* for IDL only (C/C++ defs are in guiddef.h) */ typedef GUID *REFGUID; typedef IID *REFIID; typedef CLSID *REFCLSID; typedef FMTID *REFFMTID; cpp_quote("#endif") /******************** MISC TYPES ********************/ typedef enum tagDVASPECT { DVASPECT_CONTENT = 1, DVASPECT_THUMBNAIL = 2, DVASPECT_ICON = 4, DVASPECT_DOCPRINT = 8 } DVASPECT; typedef enum tagSTGC { STGC_DEFAULT = 0, STGC_OVERWRITE = 1, STGC_ONLYIFCURRENT = 2, STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4, STGC_CONSOLIDATE = 8 } STGC; typedef enum tagSTGMOVE { STGMOVE_MOVE = 0, STGMOVE_COPY = 1, STGMOVE_SHALLOWCOPY = 2 } STGMOVE; typedef enum tagSTATFLAG { STATFLAG_DEFAULT = 0, STATFLAG_NONAME = 1, STATFLAG_NOOPEN = 2 } STATFLAG; /******************** OLE Automation ********************/ cpp_quote("#ifdef _MSC_VER") /* for IDL and MSVC only */ typedef double DATE; cpp_quote("#else") cpp_quote("typedef double DECLSPEC_ALIGN(8) DATE;") cpp_quote("#endif") cpp_quote("#if 0") /* for IDL only */ typedef struct tagCY { LONGLONG int64; } CY; cpp_quote("#else") /* C/C++ defs */ cpp_quote("#ifndef _tagCY_DEFINED") cpp_quote("#define _tagCY_DEFINED") cpp_quote("typedef union tagCY {") cpp_quote(" struct {") cpp_quote("#ifdef WORDS_BIGENDIAN") cpp_quote(" LONG Hi;") cpp_quote(" ULONG Lo;") cpp_quote("#else") cpp_quote(" ULONG Lo;") cpp_quote(" LONG Hi;") cpp_quote("#endif") cpp_quote(" } DUMMYSTRUCTNAME;") cpp_quote(" LONGLONG int64;") cpp_quote("} CY;") cpp_quote("#endif") cpp_quote("#endif") typedef CY *LPCY; cpp_quote("#if 0") /* for IDL only */ typedef struct tagDEC { USHORT wReserved; BYTE scale; BYTE sign; ULONG Hi32; ULONGLONG Lo64; } DECIMAL; cpp_quote("#else") /* C/C++ defs */ cpp_quote("typedef struct tagDEC {") cpp_quote(" USHORT wReserved;") cpp_quote(" union {") cpp_quote(" struct {") cpp_quote(" BYTE scale;") cpp_quote(" BYTE sign;") cpp_quote(" } DUMMYSTRUCTNAME;") cpp_quote(" USHORT signscale;") cpp_quote(" } DUMMYUNIONNAME;") cpp_quote(" ULONG Hi32;") cpp_quote(" union {") cpp_quote(" struct {") cpp_quote("#ifdef WORDS_BIGENDIAN") cpp_quote(" ULONG Mid32;") cpp_quote(" ULONG Lo32;") cpp_quote("#else") cpp_quote(" ULONG Lo32;") cpp_quote(" ULONG Mid32;") cpp_quote("#endif") cpp_quote(" } DUMMYSTRUCTNAME1;") cpp_quote(" ULONGLONG Lo64;") cpp_quote(" } DUMMYUNIONNAME1;") cpp_quote("} DECIMAL;") cpp_quote("#endif") cpp_quote("#define DECIMAL_NEG ((BYTE)0x80)") cpp_quote("#define DECIMAL_SETZERO(d) do{ memset(((char*)&(d)) + sizeof(USHORT), 0, sizeof(ULONG) * 3u + sizeof(USHORT)); }while (0)") typedef DECIMAL *LPDECIMAL; typedef [unique] FLAGGED_WORD_BLOB *wireBSTR; typedef [wire_marshal(wireBSTR)] OLECHAR *BSTR; typedef BSTR *LPBSTR; typedef short VARIANT_BOOL; typedef VARIANT_BOOL _VARIANT_BOOL; cpp_quote("#define VARIANT_TRUE ((VARIANT_BOOL)0xFFFF)") cpp_quote("#define VARIANT_FALSE ((VARIANT_BOOL)0x0000)") typedef struct tagBSTRBLOB { ULONG cbSize; [size_is(cbSize)] BYTE *pData; } BSTRBLOB, *LPBSTRBLOB; cpp_quote("#ifndef _tagBLOB_DEFINED") cpp_quote("#define _tagBLOB_DEFINED") cpp_quote("#define _BLOB_DEFINED") cpp_quote("#define _LPBLOB_DEFINED") typedef struct tagBLOB { ULONG cbSize; [size_is(cbSize)] BYTE *pBlobData; } BLOB, *LPBLOB; cpp_quote("#endif") typedef struct tagCLIPDATA { ULONG cbSize; long ulClipFmt; [size_is(cbSize-sizeof(long))] BYTE *pClipData; } CLIPDATA; cpp_quote("#define CBPCLIPDATA(cb) ((cb).cbSize - sizeof((cb).ulClipFmt))") typedef ULONG PROPID; /******************** VARTYPE ********************/ typedef unsigned short VARTYPE; enum VARENUM { VT_EMPTY = 0, VT_NULL = 1, VT_I2 = 2, VT_I4 = 3, VT_R4 = 4, VT_R8 = 5, VT_CY = 6, VT_DATE = 7, VT_BSTR = 8, VT_DISPATCH = 9, VT_ERROR = 10, VT_BOOL = 11, VT_VARIANT = 12, VT_UNKNOWN = 13, VT_DECIMAL = 14, VT_I1 = 16, VT_UI1 = 17, VT_UI2 = 18, VT_UI4 = 19, VT_I8 = 20, VT_UI8 = 21, VT_INT = 22, VT_UINT = 23, VT_VOID = 24, VT_HRESULT = 25, VT_PTR = 26, VT_SAFEARRAY = 27, VT_CARRAY = 28, VT_USERDEFINED = 29, VT_LPSTR = 30, VT_LPWSTR = 31, VT_RECORD = 36, VT_INT_PTR = 37, VT_UINT_PTR = 38, VT_FILETIME = 64, VT_BLOB = 65, VT_STREAM = 66, VT_STORAGE = 67, VT_STREAMED_OBJECT = 68, VT_STORED_OBJECT = 69, VT_BLOB_OBJECT = 70, VT_CF = 71, VT_CLSID = 72, VT_VERSIONED_STREAM= 73, VT_BSTR_BLOB = 0x0fff, VT_VECTOR = 0x1000, VT_ARRAY = 0x2000, VT_BYREF = 0x4000, VT_RESERVED = 0x8000, VT_ILLEGAL = 0xffff, VT_ILLEGALMASKED = 0x0fff, VT_TYPEMASK = 0x0fff }; typedef struct tagCSPLATFORM { DWORD dwPlatformId; DWORD dwVersionHi; DWORD dwVersionLo; DWORD dwProcessorArch; } CSPLATFORM; typedef struct tagQUERYCONTEXT { DWORD dwContext; CSPLATFORM Platform; LCID Locale; DWORD dwVersionHi; DWORD dwVersionLo; } QUERYCONTEXT; typedef [v1_enum] enum tagTYSPEC { TYSPEC_CLSID, TYSPEC_FILEEXT, TYSPEC_MIMETYPE, TYSPEC_PROGID, TYSPEC_FILENAME, TYSPEC_PACKAGENAME, TYSPEC_OBJECTID } TYSPEC; typedef union switch(DWORD tyspec) { case TYSPEC_CLSID: CLSID clsid; case TYSPEC_FILEEXT: LPOLESTR pFileExt; case TYSPEC_MIMETYPE: LPOLESTR pMimeType; case TYSPEC_PROGID: LPOLESTR pProgId; case TYSPEC_FILENAME: LPOLESTR pFileName; case TYSPEC_PACKAGENAME: struct { LPOLESTR pPackageName; GUID PolicyId; } ByName; case TYSPEC_OBJECTID: struct { GUID ObjectId; GUID PolicyId; } ByObjectId; } uCLSSPEC; cpp_quote("#ifndef PROPERTYKEY_DEFINED") cpp_quote("#define PROPERTYKEY_DEFINED") typedef struct _tagpropertykey { GUID fmtid; DWORD pid; } PROPERTYKEY; cpp_quote("#endif /*PROPERTYKEY_DEFINED*/") } /* interface IWinTypes */ cpp_quote("#ifdef _MSC_VER") cpp_quote("#pragma warning(pop)") cpp_quote("#endif")