Nobody seems to have complained about how I implemented wtypes.idl, so I'll try to submit it. wtypes.idl and wtypes.h should go into include/ (the new wtypes.h should overwrite the old) Log: Ove Kaaven <ovek@transgaming.com> Wrote a Wine-compatible wtypes.idl, and generated wtypes.h from it.
[ uuid(D3980A60-910C-1068-9341-00DD010F2F1C), version(0.1), pointer_default(unique) ] interface IWinTypes { /******************** WINE STUFF ********************/ cpp_quote("#include \"basetsd.h\"") cpp_quote("#include \"guiddef.h\"") cpp_quote("#include \"rpc.h\"") cpp_quote("#include \"rpcndr.h\"") /* from Wine's pre-WIDL wtypes.h */ /* FIXME: does not belong here */ cpp_quote("typedef CHAR OLECHAR16;") cpp_quote("typedef LPSTR LPOLESTR16;") cpp_quote("typedef LPCSTR LPCOLESTR16;") cpp_quote("typedef OLECHAR16 *BSTR16;") cpp_quote("typedef BSTR16 *LPBSTR16;") cpp_quote("#define OLESTR16(x) x") /******************** 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 double DOUBLE; typedef void *PVOID, *LPVOID; 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 void *HANDLE; #define DECLARE_HANDLE(name) typedef void *name #define DECLARE_WIREM_HANDLE(name) typedef [wire_marshal(wire##name)] void*name typedef double DATE; typedef LONG HRESULT; typedef DWORD LCID; typedef unsigned __int64 DWORDLONG; typedef __int64 LONGLONG; typedef unsigned __int64 ULONGLONG; 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; cpp_quote("#endif /* winnt.h */") cpp_quote("#ifndef _FILETIME_") cpp_quote("#define _FILETIME_") typedef struct _FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime; } FILETIME, *PFILETIME, *LPFILETIME; cpp_quote("#endif") /******************** BASIC COM/OLE TYPES ********************/ typedef WCHAR OLECHAR; typedef [string] OLECHAR *LPOLESTR; typedef [string] const OLECHAR *LPCOLESTR; cpp_quote("#ifndef __WINE__") cpp_quote("#define OLESTR(str) WINE_UNICODE_TEXT(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; /* FIXME: COSERVERINFO was in Wine's pre-WIDL wtypes.h, but should be in objidl.idl */ typedef struct _COSERVERINFO { DWORD dwReserved1; LPWSTR pwszName; COAUTHINFO *pAuthInfo; DWORD dwReserved2; } COSERVERINFO; 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_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; /******************** GDI TYPES ********************/ const unsigned long WDT_INPROC_CALL = 0x48746457; const unsigned long WDT_REMOTE_CALL = 0x52746457; typedef union _userCLIPFORMAT switch(long fContext) { case WDT_INPROC_CALL: DWORD dwValue; case WDT_REMOTE_CALL: [string] wchar_t *pwszName; } userCLIPFORMAT; typedef [unique] userCLIPFORMAT *wireCLIPFORMAT; typedef [wire_marshal(wireCLIPFORMAT)] WORD CLIPFORMAT; typedef struct tagRemHMETAFILEPICT { long mm; long xExt; long yExt; unsigned long cbData; [size_is(cbData)] byte data[]; } RemHMETAFILEPICT; typedef union _userHMETAFILE switch(long fContext) { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: BYTE_BLOB *hRemote; default: long hGlobal; } userHMETAFILE; typedef [unique] userHMETAFILE *wireHMETAFILE; typedef struct _remoteMETAFILEPICT { long mm; long xExt; long yExt; userHMETAFILE *hMF; } remoteMETAFILEPICT; typedef union _userHMETAFILEPICT switch(long fContext) { case WDT_INPROC_CALL: long hInproc; case WDT_REMOTE_CALL: remoteMETAFILEPICT *hRemote; default: long hGlobal; } userHMETAFILEPICT; typedef [unique] userHMETAFILEPICT *wireHMETAFILEPICT; cpp_quote("#if 0") DECLARE_WIREM_HANDLE(HMETAFILE); cpp_quote("#endif") DECLARE_WIREM_HANDLE(HMETAFILEPICT); /******************** GUID TYPES ********************/ cpp_quote("#ifndef GUID_DEFINED") cpp_quote("#define GUID_DEFINED") typedef struct _GUID { DWORD Data1; WORD Data2; WORD Data3; BYTE Data4[8]; } GUID; cpp_quote("#endif") cpp_quote("#if 0 /* guiddef.h */") typedef GUID *LPGUID; typedef GUID IID; typedef IID *LPIID; cpp_quote("#if 0") /* for IDL only (C/C++ defs are in guiddef.h) */ typedef GUID *REFGUID; typedef IID *REFIID; cpp_quote("#endif") cpp_quote("#endif /* guiddef.h */") /******************** 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; /******************** OLE Automation ********************/ cpp_quote("#if 0") /* for IDL only */ typedef struct tagCY { LONGLONG int64; } CY; cpp_quote("#else") /* C/C++ defs */ 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") typedef CY *LPCY; typedef struct tagDEC { USHORT wReserved; BYTE scale; BYTE sign; ULONG Hi32; ULONGLONG Lo64; } DECIMAL; 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 tagBLOB { ULONG cbSize; [size_is(cbSize)] BYTE *pBlobData; } BLOB, *LPBLOB; typedef struct tagCLIPDATA { ULONG cbSize; long ulClipFmt; [size_is(cbSize-4)] BYTE *pClipData; } CLIPDATA; cpp_quote("#define CBPCLIPDATA(cb) ((cb).cbSize - sizeof((cb).ulClipFmt))") typedef ULONG PROPID; /******************** VARTYPE ********************/ typedef unsigned short VARTYPE; /* FIXME: enum VARENUM */ } /* interface IWinTypes */
/*** Autogenerated by WIDL 0.1 from wtypes.idl - Do not edit ***/ #ifndef __WIDL_WTYPES_H #define __WIDL_WTYPES_H #include "basetsd.h" #include "guiddef.h" #include "rpc.h" #include "rpcndr.h" typedef CHAR OLECHAR16; typedef LPSTR LPOLESTR16; typedef LPCSTR LPCOLESTR16; typedef OLECHAR16 *BSTR16; typedef BSTR16 *LPBSTR16; #define OLESTR16(x) x #if 0 /* winnt.h */ 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 double DOUBLE; typedef void *PVOID, *LPVOID; typedef char CHAR; typedef CHAR *LPSTR; typedef const CHAR *LPCSTR; typedef wchar_t WCHAR; typedef WCHAR *LPWSTR; typedef const WCHAR *LPCWSTR; typedef boolean BOOLEAN; typedef void *HANDLE; typedef double DATE; typedef LONG HRESULT; typedef DWORD LCID; typedef unsigned __int64 DWORDLONG; typedef __int64 LONGLONG; typedef unsigned __int64 ULONGLONG; 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; ULONG SubAuthority[1]; } 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; #endif /* winnt.h */ #ifndef _FILETIME_ #define _FILETIME_ typedef struct _FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime; } FILETIME, *PFILETIME, *LPFILETIME; #endif typedef WCHAR OLECHAR; typedef OLECHAR *LPOLESTR; typedef const OLECHAR *LPCOLESTR; #ifndef __WINE__ #define OLESTR(str) WINE_UNICODE_TEXT(str) #endif typedef LONG SCODE; typedef struct _COAUTHIDENTITY { USHORT *User; ULONG UserLength; USHORT *Domain; ULONG DomainLength; 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 struct _COSERVERINFO { DWORD dwReserved1; LPWSTR pwszName; COAUTHINFO *pAuthInfo; DWORD dwReserved2; } COSERVERINFO; #ifndef _ROTFLAGS_DEFINED #define _ROTFLAGS_DEFINED #define ROTFLAGS_REGISTRATIONKEEPSALIVE 0x1 #define ROTFLAGS_ALLOWANYCLIENT 0x2 #endif typedef enum tagCLSCTX { CLSCTX_INPROC_SERVER = 1, CLSCTX_INPROC_HANDLER = 2, CLSCTX_LOCAL_SERVER = 4, CLSCTX_INPROC_SERVER16 = 8, CLSCTX_REMOTE_SERVER = 16, CLSCTX_INPROC_HANDLER16 = 32, CLSCTX_INPROC_SERVERX86 = 64, CLSCTX_INPROC_HANDLERX86 = 128, CLSCTX_ESERVER_HANDLER = 256, CLSCTX_NO_CODE_DOWNLOAD = 1024, CLSCTX_NO_CUSTOM_MARSHAL = 4096, CLSCTX_ENABLE_CODE_DOWNLOAD = 8192, CLSCTX_NO_FAILURE_LOG = 16384, CLSCTX_DISABLE_AAA = 32768, CLSCTX_ENABLE_AAA = 65536, CLSCTX_FROM_DEFAULT_CONTEXT = 131072 } CLSCTX; #define CLSCTX_INPROC (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER) #define CLSCTX_ALL (CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER) #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; typedef struct _BYTE_BLOB { unsigned long clSize; byte abData[1]; } BYTE_BLOB; typedef BYTE_BLOB *UP_BYTE_BLOB; typedef struct _FLAGGED_WORD_BLOB { unsigned long fFlags; unsigned long clSize; unsigned short asData[1]; } FLAGGED_WORD_BLOB; typedef FLAGGED_WORD_BLOB *UP_FLAGGED_WORD_BLOB; typedef struct _userCLIPFORMAT { long fContext; union { DWORD dwValue; wchar_t *pwszName; } u; } userCLIPFORMAT; typedef userCLIPFORMAT *wireCLIPFORMAT; typedef WORD CLIPFORMAT; typedef struct tagRemHMETAFILEPICT { long mm; long xExt; long yExt; unsigned long cbData; byte data[1]; } RemHMETAFILEPICT; typedef struct _userHMETAFILE { long fContext; union { long hInproc; BYTE_BLOB *hRemote; long hGlobal; } u; } userHMETAFILE; typedef userHMETAFILE *wireHMETAFILE; typedef struct _remoteMETAFILEPICT { long mm; long xExt; long yExt; userHMETAFILE *hMF; } remoteMETAFILEPICT; typedef struct _userHMETAFILEPICT { long fContext; union { long hInproc; remoteMETAFILEPICT *hRemote; long hGlobal; } u; } userHMETAFILEPICT; typedef userHMETAFILEPICT *wireHMETAFILEPICT; #if 0 typedef void *HMETAFILE; #endif typedef void *HMETAFILEPICT; #ifndef GUID_DEFINED #define GUID_DEFINED typedef struct _GUID { DWORD Data1; WORD Data2; WORD Data3; BYTE Data4[8]; } GUID; #endif #if 0 /* guiddef.h */ typedef GUID *LPGUID; typedef GUID IID; typedef IID *LPIID; #if 0 typedef GUID *REFGUID; typedef IID *REFIID; #endif #endif /* guiddef.h */ 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; #if 0 typedef struct tagCY { LONGLONG int64; } CY; #else typedef union tagCY { struct { #ifdef WORDS_BIGENDIAN LONG Hi; ULONG Lo; #else ULONG Lo; LONG Hi; #endif } DUMMYSTRUCTNAME; LONGLONG int64; } CY; #endif typedef CY *LPCY; typedef struct tagDEC { USHORT wReserved; BYTE scale; BYTE sign; ULONG Hi32; ULONGLONG Lo64; } DECIMAL; typedef DECIMAL *LPDECIMAL; typedef FLAGGED_WORD_BLOB *wireBSTR; typedef OLECHAR *BSTR; typedef BSTR *LPBSTR; typedef short VARIANT_BOOL; typedef VARIANT_BOOL _VARIANT_BOOL; #define VARIANT_TRUE ((VARIANT_BOOL)0xFFFF) #define VARIANT_FALSE ((VARIANT_BOOL)0x0000) typedef struct tagBLOB { ULONG cbSize; BYTE *pBlobData; } BLOB, *LPBLOB; typedef struct tagCLIPDATA { ULONG cbSize; long ulClipFmt; BYTE *pClipData; } CLIPDATA; #define CBPCLIPDATA(cb) ((cb).cbSize - sizeof((cb).ulClipFmt)) typedef ULONG PROPID; typedef unsigned short VARTYPE; #endif /* __WIDL_WTYPES_H */