Mercurial > projects > dwt2
diff org.eclipse.swt.win32.win32.x86/src/org/eclipse/swt/internal/ole/win32/OAIDL.d @ 0:6dd524f61e62
add dwt win and basic java stuff
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Mon, 02 Mar 2009 14:44:16 +0100 |
parents | |
children | 2e09b0e6857a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/org.eclipse.swt.win32.win32.x86/src/org/eclipse/swt/internal/ole/win32/OAIDL.d Mon Mar 02 14:44:16 2009 +0100 @@ -0,0 +1,1158 @@ +module org.eclipse.swt.internal.ole.win32.OAIDL; + +//+--------------------------------------------------------------------------- +// +// Microsoft Windows +// Copyright 1992 - 1998 Microsoft Corporation. +// +// File: oaidl.idl +// +//---------------------------------------------------------------------------- + +//private import std.c.windows.windows; +//private import std.c.windows.com; +private import org.eclipse.swt.internal.ole.win32.OBJIDL; +private import org.eclipse.swt.internal.ole.win32.extras; +private import org.eclipse.swt.internal.win32.WINTYPES; +private import org.eclipse.swt.ole.win32.Variant; + +extern(Windows) { + +struct DECIMAL + { + USHORT wReserved; + BYTE scale; + BYTE sign; + ULONG Hi32; + ulong Lo64; + } ; + +alias wchar * BSTR; +struct FLAGGED_WORD_BLOB + { + ULONG fFlags; + ULONG clSize; + ushort[1] asData; + } + +alias FLAGGED_WORD_BLOB *wireBSTR; + + struct BYTE_SIZEDARR + { + ULONG clSize; + byte *pData; + } ; + + struct WORD_SIZEDARR + { + ULONG clSize; + ushort *pData; + } ; + +struct DWORD_SIZEDARR + { + ULONG clSize; + ULONG * pData; + } ; + +struct HYPER_SIZEDARR + { + ULONG clSize; + long *pData; + } + + +enum +{ 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_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_BSTR_BLOB = 0xfff, + VT_VECTOR = 0x1000, + VT_ARRAY = 0x2000, + VT_BYREF = 0x4000, + VT_RESERVED = 0x8000, + VT_ILLEGAL = 0xffff, + VT_ILLEGALMASKED = 0xfff, + VT_TYPEMASK = 0xfff +}; + + +/* +cpp_quote("//+-------------------------------------------------------------------------") +cpp_quote("//") +cpp_quote("// Microsoft Windows") +cpp_quote("// Copyright 1992 - 1998 Microsoft Corporation.") +cpp_quote("//") +cpp_quote("//--------------------------------------------------------------------------") + +cpp_quote("#if ( _MSC_VER >= 800 )") +*/ +//cpp_quote("#pragma warning(disable:4201) /* Nameless struct/union */") +/* +cpp_quote("#endif") + +#ifndef DO_NO_IMPORTS +import "objidl.idl"; +#endif + +interface ICreateTypeInfo; +interface ICreateTypeInfo2; +interface ICreateTypeLib; +interface ICreateTypeLib2; +interface IDispatch; +interface IEnumVARIANT; +interface ITypeComp; +interface ITypeInfo; +interface ITypeInfo2; +interface ITypeLib; +interface ITypeLib2; +interface ITypeChangeEvents; +interface IErrorInfo; +interface ICreateErrorInfo; +interface ISupportErrorInfo; +interface ITypeFactory; +interface ITypeMarshal; +interface IRecordInfo; + + +[ + version(1.0), pointer_default(unique) +] + +interface IOleAutomationTypes +{ + +typedef CY CURRENCY; + +// ######################################################################### +// SAFEARRAY +// ######################################################################### +*/ +struct SAFEARRAYBOUND { + ULONG cElements; + LONG lLbound; +} +alias SAFEARRAYBOUND * LPSAFEARRAYBOUND; + +struct _wireVARIANT { +} +struct _wireBRECORD { +} +// Forward references. +alias _wireVARIANT * wireVARIANT; +alias _wireBRECORD * wireBRECORD; + +struct SAFEARR_BSTR { + ULONG Size; + wireBSTR * aBstr; +} +struct SAFEARR_UNKNOWN { + ULONG Size; + IUnknown * apUnknown; +} + +struct SAFEARR_DISPATCH { + ULONG Size; + IDispatch * apDispatch; +} + +struct SAFEARR_VARIANT { + ULONG Size; + wireVARIANT * aVariant; +} + +struct SAFEARR_BRECORD { + ULONG Size; + wireBRECORD * aRecord; +} + +struct SAFEARR_HAVEIID { + ULONG Size; + IUnknown * apUnknown; + IID iid; +} + +enum SF_TYPE { + SF_ERROR = VT_ERROR, + SF_I1 = VT_I1, + SF_I2 = VT_I2, + SF_I4 = VT_I4, + SF_I8 = VT_I8, + SF_BSTR = VT_BSTR, + SF_UNKNOWN = VT_UNKNOWN, + SF_DISPATCH = VT_DISPATCH, + SF_VARIANT = VT_VARIANT, + SF_RECORD = VT_RECORD, + SF_HAVEIID = VT_UNKNOWN|VT_RESERVED, +} + +union uSAFEARRAY_UNION { +SAFEARR_BSTR BstrStr; +SAFEARR_UNKNOWN UnknownStr; +SAFEARR_DISPATCH DispatchStr; +SAFEARR_VARIANT VariantStr; +SAFEARR_BRECORD RecordStr; +SAFEARR_HAVEIID HaveIidStr; +BYTE_SIZEDARR ByteStr; +WORD_SIZEDARR WordStr; +DWORD_SIZEDARR LongStr; +HYPER_SIZEDARR HyperStr; +} + +struct SAFEARRAY_UNION { + ULONG sfType; + uSAFEARRAY_UNION u; +} + +alias SAFEARRAY_UNION SAFEARRAYUNION; + +struct wireSAFEARRAY { + USHORT cDims; + USHORT fFeatures; + ULONG cbElements; + ULONG cLocks; + SAFEARRAYUNION uArrayStructs; + SAFEARRAYBOUND[1] rgsabound; +} +alias wireSAFEARRAY SAFEARRAY ; + +alias wireSAFEARRAY * wirePSAFEARRAY; + + +struct tagSAFEARRAY { + USHORT cDims; + USHORT fFeatures; + ULONG cbElements; + ULONG cLocks; + PVOID pvData; + SAFEARRAYBOUND[1] rgsabound; +} + +alias SAFEARRAY * LPSAFEARRAY; + +const USHORT FADF_AUTO = 0x0001; /* array is allocated on the stack */ +const USHORT FADF_STATIC = 0x0002; /* array is staticly allocated */ +const USHORT FADF_EMBEDDED = 0x0004; /* array is embedded in a structure */ +const USHORT FADF_FIXEDSIZE = 0x0010; /* may not be resized or reallocated */ +const USHORT FADF_RECORD = 0x0020; /* an array of records */ +const USHORT FADF_HAVEIID = 0x0040; /* with FADF_DISPATCH, FADF_UNKNOWN */ + /* array has an IID for interfaces */ +const USHORT FADF_HAVEVARTYPE= 0x0080; /* array has a VT type */ +const USHORT FADF_BSTR = 0x0100; /* an array of BSTRs */ +const USHORT FADF_UNKNOWN = 0x0200; /* an array of IUnknown* */ +const USHORT FADF_DISPATCH = 0x0400; /* an array of IDispatch* */ +const USHORT FADF_VARIANT = 0x0800; /* an array of VARIANTs */ +const USHORT FADF_RESERVED = 0xF008; /* reserved bits */ + + +// ######################################################################### +// VARIANT +// ######################################################################### +/* +cpp_quote("#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)") +cpp_quote("#define __VARIANT_NAME_1 n1") +cpp_quote("#define __VARIANT_NAME_2 n2") +cpp_quote("#define __VARIANT_NAME_3 n3") +cpp_quote("#define __VARIANT_NAME_4 brecVal") +cpp_quote("#else") +cpp_quote("#define __tagVARIANT") +cpp_quote("#define __VARIANT_NAME_1") +cpp_quote("#define __VARIANT_NAME_2") +cpp_quote("#define __VARIANT_NAME_3") +cpp_quote("#define __tagBRECORD") +cpp_quote("#define __VARIANT_NAME_4") +cpp_quote("#endif") +*/ + +/*struct brecVal_t { + PVOID pvRecord; + IRecordInfo * pRecInfo; +}*/ +struct brecVal_t { + PVOID pvRecord; + IUnknown * pRecInfo; +} + +alias double DOUBLE; +alias double DATE; +alias VARIANT_BOOL _VARIANT_BOOL; +alias long CY; + + +union n3_t { + LONG lVal; /* VT_I4 */ + BYTE bVal; /* VT_UI1 */ + SHORT iVal; /* VT_I2 */ + FLOAT fltVal; /* VT_R4 */ + DOUBLE dblVal; /* VT_R8 */ + VARIANT_BOOL boolVal; /* VT_BOOL */ + _VARIANT_BOOL BOOLval; /* (obsolete) */ + SCODE scode; /* VT_ERROR */ + CY cyVal; /* VT_CY */ + DATE date; /* VT_DATE */ + BSTR bstrVal; /* VT_BSTR */ + IUnknown punkVal; /* VT_UNKNOWN */ + IDispatch pdispVal; /* VT_DISPATCH */ + SAFEARRAY * parray; /* VT_ARRAY */ + BYTE * pbVal; /* VT_BYREF|VT_UI1 */ + SHORT * piVal; /* VT_BYREF|VT_I2 */ + LONG * plVal; /* VT_BYREF|VT_I4 */ + FLOAT * pfltVal; /* VT_BYREF|VT_R4 */ + DOUBLE * pdblVal; /* VT_BYREF|VT_R8 */ + VARIANT_BOOL *pboolVal; /* VT_BYREF|VT_BOOL */ + _VARIANT_BOOL *pbool; /* (obsolete) */ + SCODE * pscode; /* VT_BYREF|VT_ERROR */ + CY * pcyVal; /* VT_BYREF|VT_CY */ + DATE * pdate; /* VT_BYREF|VT_DATE */ + BSTR * pbstrVal; /* VT_BYREF|VT_BSTR */ + IUnknown * ppunkVal; /* VT_BYREF|VT_UNKNOWN */ + IDispatch * ppdispVal; /* VT_BYREF|VT_DISPATCH */ + SAFEARRAY ** pparray; /* VT_BYREF|VT_ARRAY */ + VARIANT * pvarVal; /* VT_BYREF|VT_VARIANT */ + PVOID byref; /* Generic ByRef */ + CHAR cVal; /* VT_I1 */ + USHORT uiVal; /* VT_UI2 */ + ULONG ulVal; /* VT_UI4 */ + INT intVal; /* VT_INT */ + UINT uintVal; /* VT_UINT */ + DECIMAL * pdecVal; /* VT_BYREF|VT_DECIMAL */ + CHAR * pcVal; /* VT_BYREF|VT_I1 */ + USHORT * puiVal; /* VT_BYREF|VT_UI2 */ + ULONG * pulVal; /* VT_BYREF|VT_UI4 */ + INT * pintVal; /* VT_BYREF|VT_INT */ + UINT * puintVal; /* VT_BYREF|VT_UINT */ + brecVal_t brecVal; /* VT_RECORD */ +} + +struct n2_t { + VARTYPE vt; + WORD wReserved1; + WORD wReserved2; + WORD wReserved3; + n3_t n3; +}; +union n1_t { + n2_t n2; + DECIMAL decVal; +}; + +// in tango.sys.win32.Types +/+ +struct VARIANT { + n1_t n1; + + VARTYPE vt() { return n1.n2.vt; }; + void vt(VARTYPE val) { n1.n2.vt = val; } + LONG lVal() { return n1.n2.n3.lVal; } + void lVal(LONG val) { return n1.n2.n3.lVal = val; } + FLOAT fltVal() { return n1.n2.n3.fltVal; } + void fltVal(FLOAT val) { return n1.n2.n3.fltVal = val; } + IDispatch pdispVal() { return n1.n2.n3.pdispVal; } + void pdispVal(IDispatch val) { n1.n2.n3.pdispVal = val; } + IUnknown punkVal() { return n1.n2.n3.punkVal; } + void punkVal(IUnknown val) { n1.n2.n3.punkVal = val; } + VARIANT_BOOL boolVal() { return n1.n2.n3.boolVal; } + void boolVal(VARIANT_BOOL val) { n1.n2.n3.boolVal = val; } + SHORT iVal() { return n1.n2.n3.iVal; } + void iVal(SHORT val) { n1.n2.n3.iVal = val; } + BSTR bstrVal() { return n1.n2.n3.bstrVal; } + void bstrVal(BSTR val) { n1.n2.n3.bstrVal = val; } + +}; ++/ + + +/* +struct VARIANT { + LONG[4] mmmm; +} +*/ +alias VARIANT * LPVARIANT; +alias VARIANT VARIANTARG; +alias VARIANT * LPVARIANTARG; + +/+ +struct _wireBRECORD { + ULONG fFlags; + ULONG clSize; + IRecordInfo pRecInfo; + byte * pRecord; +}; +++++++++++++++++++++/ + + +/+ +struct _wireVARIANT { + DWORD clSize; + DWORD rpcReserved; + USHORT vt; + USHORT wReserved1; + USHORT wReserved2; + USHORT wReserved3; + [switch_type(ULONG), switch_is(vt)] union { + [case(VT_I4)] LONG lVal; /* VT_I4 */ + [case(VT_UI1)] BYTE bVal; /* VT_UI1 */ + [case(VT_I2)] SHORT iVal; /* VT_I2 */ + [case(VT_R4)] FLOAT fltVal; /* VT_R4 */ + [case(VT_R8)] DOUBLE dblVal; /* VT_R8 */ + [case(VT_BOOL)] VARIANT_BOOL boolVal; /* VT_BOOL */ + [case(VT_ERROR)] SCODE scode; /* VT_ERROR */ + [case(VT_CY)] CY cyVal; /* VT_CY */ + [case(VT_DATE)] DATE date; /* VT_DATE */ + [case(VT_BSTR)] wireBSTR bstrVal; /* VT_BSTR */ + [case(VT_UNKNOWN)] IUnknown * punkVal; /* VT_UNKNOWN */ + [case(VT_DISPATCH)] IDispatch * pdispVal; /* VT_DISPATCH */ + [case(VT_ARRAY)] wireSAFEARRAY parray; /* VT_ARRAY */ + + [case(VT_RECORD, VT_RECORD|VT_BYREF)] + wireBRECORD brecVal; /* VT_RECORD */ + + [case(VT_UI1|VT_BYREF)] + BYTE * pbVal; /* VT_BYREF|VT_UI1 */ + [case(VT_I2|VT_BYREF)] + SHORT * piVal; /* VT_BYREF|VT_I2 */ + [case(VT_I4|VT_BYREF)] + LONG * plVal; /* VT_BYREF|VT_I4 */ + [case(VT_R4|VT_BYREF)] + FLOAT * pfltVal; /* VT_BYREF|VT_R4 */ + [case(VT_R8|VT_BYREF)] + DOUBLE * pdblVal; /* VT_BYREF|VT_R8 */ + [case(VT_BOOL|VT_BYREF)] + VARIANT_BOOL *pboolVal; /* VT_BYREF|VT_BOOL */ + [case(VT_ERROR|VT_BYREF)] + SCODE * pscode; /* VT_BYREF|VT_ERROR */ + [case(VT_CY|VT_BYREF)] + CY * pcyVal; /* VT_BYREF|VT_CY */ + [case(VT_DATE|VT_BYREF)] + DATE * pdate; /* VT_BYREF|VT_DATE */ + [case(VT_BSTR|VT_BYREF)] + wireBSTR * pbstrVal; /* VT_BYREF|VT_BSTR */ + [case(VT_UNKNOWN|VT_BYREF)] + IUnknown ** ppunkVal; /* VT_BYREF|VT_UNKNOWN */ + [case(VT_DISPATCH|VT_BYREF)] + IDispatch ** ppdispVal; /* VT_BYREF|VT_DISPATCH */ + [case(VT_ARRAY|VT_BYREF)] + wireSAFEARRAY *pparray; /* VT_BYREF|VT_ARRAY */ + [case(VT_VARIANT|VT_BYREF)] + wireVARIANT * pvarVal; /* VT_BYREF|VT_VARIANT */ + + [case(VT_I1)] CHAR cVal; /* VT_I1 */ + [case(VT_UI2)] USHORT uiVal; /* VT_UI2 */ + [case(VT_UI4)] ULONG ulVal; /* VT_UI4 */ + [case(VT_INT)] INT intVal; /* VT_INT */ + [case(VT_UINT)] UINT uintVal; /* VT_UINT */ + [case(VT_DECIMAL)] DECIMAL decVal; /* VT_DECIMAL */ + + [case(VT_BYREF|VT_DECIMAL)] + DECIMAL * pdecVal; /* VT_BYREF|VT_DECIMAL */ + [case(VT_BYREF|VT_I1)] + CHAR * pcVal; /* VT_BYREF|VT_I1 */ + [case(VT_BYREF|VT_UI2)] + USHORT * puiVal; /* VT_BYREF|VT_UI2 */ + [case(VT_BYREF|VT_UI4)] + ULONG * pulVal; /* VT_BYREF|VT_UI4 */ + [case(VT_BYREF|VT_INT)] + INT * pintVal; /* VT_BYREF|VT_INT */ + [case(VT_BYREF|VT_UINT)] + UINT * puintVal; /* VT_BYREF|VT_UINT */ + [case(VT_EMPTY)] ; /* nothing */ + [case(VT_NULL)] ; /* nothing */ + }; +}; ++/ + +//######################################################################## +// End of VARIANT & SAFEARRAY +//######################################################################## + + +//TypeInfo stuff. + +alias LONG DISPID; +alias DISPID MEMBERID; +alias DWORD HREFTYPE; + +enum TYPEKIND { + TKIND_ENUM = 0, + TKIND_RECORD, + TKIND_MODULE, + TKIND_INTERFACE, + TKIND_DISPATCH, + TKIND_COCLASS, + TKIND_ALIAS, + TKIND_UNION, + TKIND_MAX /* end of enum marker */ +} +union TD_00{ + TYPEDESC * lptdesc; + ARRAYDESC * lpadesc; + HREFTYPE hreftype; +}; + +struct TYPEDESC { + TD_00 u; + VARTYPE vt; +} + +struct ARRAYDESC { + TYPEDESC tdescElem; /* element type */ + USHORT cDims; /* dimension count */ + SAFEARRAYBOUND[1] rgbounds; /* var len array of bounds */ +} + +// parameter description +struct PARAMDESCEX { + ULONG cBytes; /* size of this structure */ + VARIANTARG varDefaultValue; /* default value of this parameter */ +} +alias PARAMDESCEX * LPPARAMDESCEX; + +struct PARAMDESC { + LPPARAMDESCEX pparamdescex; /* valid if PARAMFLAG_FHASDEFAULT bit is set */ + USHORT wParamFlags; /* IN, OUT, etc */ +} +alias PARAMDESC * LPPARAMDESC; + +const USHORT PARAMFLAG_NONE = 0x00; +const USHORT PARAMFLAG_FIN = 0x01; +const USHORT PARAMFLAG_FOUT = 0x02; +const USHORT PARAMFLAG_FLCID = 0x04; +const USHORT PARAMFLAG_FRETVAL = 0x08; +const USHORT PARAMFLAG_FOPT = 0x10; +const USHORT PARAMFLAG_FHASDEFAULT = 0x20; +const USHORT PARAMFLAG_FHASCUSTDATA = 0x40; + +struct IDLDESC { + ULONG dwReserved; + USHORT wIDLFlags; /* IN, OUT, etc */ +} +alias IDLDESC * LPIDLDESC; + +const USHORT IDLFLAG_NONE = PARAMFLAG_NONE; +const USHORT IDLFLAG_FIN = PARAMFLAG_FIN; +const USHORT IDLFLAG_FOUT = PARAMFLAG_FOUT; +const USHORT IDLFLAG_FLCID = PARAMFLAG_FLCID; +const USHORT IDLFLAG_FRETVAL = PARAMFLAG_FRETVAL; + + +struct ELEMDESC { /* a format that MIDL likes */ + TYPEDESC tdesc; /* the type of the element */ + PARAMDESC paramdesc; /* IDLDESC is a subset of PARAMDESC */ +} + +struct TYPEATTR { + GUID guid; /* the GUID of the TypeInfo */ + LCID lcid; /* locale of member names and doc strings */ + DWORD dwReserved; + MEMBERID memidConstructor; /* ID of constructor, MEMBERID_NIL if none */ + MEMBERID memidDestructor; /* ID of destructor, MEMBERID_NIL if none */ + LPOLESTR lpstrSchema; + ULONG cbSizeInstance; /* the size of an instance of this type */ + TYPEKIND typekind; /* the kind of type this typeinfo describes */ + WORD cFuncs; /* number of functions */ + WORD cVars; /* number of variables / data members */ + WORD cImplTypes; /* number of implemented interfaces */ + WORD cbSizeVft; /* the size of this types virtual func table */ + WORD cbAlignment; /* specifies the alignment requirements for + an instance of this type, + 0 = align on 64k boundary + 1 = byte align + 2 = word align + 4 = dword align... */ + WORD wTypeFlags; + WORD wMajorVerNum; /* major version number */ + WORD wMinorVerNum; /* minor version number */ + TYPEDESC tdescAlias; /* if typekind == TKIND_ALIAS this field + specifies the type for which this type + is an alias */ + IDLDESC idldescType; /* IDL attributes of the described type */ +} +alias TYPEATTR * LPTYPEATTR; + + +struct DISPPARAMS { + VARIANTARG * rgvarg; + DISPID * rgdispidNamedArgs; + UINT cArgs; + UINT cNamedArgs; +} + +struct EXCEPINFO { + WORD wCode; /* An error code describing the error. */ + WORD wReserved; + BSTR bstrSource; /* A source of the exception */ + BSTR bstrDescription; /* A description of the error */ + BSTR bstrHelpFile; /* Fully qualified drive, path, and file name */ + DWORD dwHelpContext; /* help context of topic within the help file */ + ULONG pvReserved; + ULONG pfnDeferredFillIn; + SCODE scode; +} +/+ + +cpp_quote("#else /* 0 */") +cpp_quote("typedef struct tagEXCEPINFO {") +cpp_quote(" WORD wCode;") +cpp_quote(" WORD wReserved;") +cpp_quote(" BSTR bstrSource;") +cpp_quote(" BSTR bstrDescription;") +cpp_quote(" BSTR bstrHelpFile;") +cpp_quote(" DWORD dwHelpContext;") +cpp_quote(" PVOID pvReserved;") +cpp_quote(" HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *);") +cpp_quote(" SCODE scode;") +cpp_quote("} EXCEPINFO, * LPEXCEPINFO;") +cpp_quote("#endif /* 0 */") ++/ + +enum CALLCONV { + CC_FASTCALL = 0, + CC_CDECL = 1, + CC_MSCPASCAL, + CC_PASCAL = CC_MSCPASCAL, + CC_MACPASCAL, + CC_STDCALL, + CC_FPFASTCALL, + CC_SYSCALL, + CC_MPWCDECL, + CC_MPWPASCAL, + CC_MAX /* end of enum marker */ +} +enum FUNCKIND { + FUNC_VIRTUAL, + FUNC_PUREVIRTUAL, + FUNC_NONVIRTUAL, + FUNC_STATIC, + FUNC_DISPATCH +} + +enum INVOKEKIND { + INVOKE_FUNC = 1, + INVOKE_PROPERTYGET = 2, + INVOKE_PROPERTYPUT = 4, + INVOKE_PROPERTYPUTREF = 8 +} + +struct FUNCDESC { + MEMBERID memid; + SCODE * lprgscode; + ELEMDESC * lprgelemdescParam; /* array of param types */ + FUNCKIND funckind; + INVOKEKIND invkind; + CALLCONV callconv; + SHORT cParams; + SHORT cParamsOpt; + SHORT oVft; + SHORT cScodes; + ELEMDESC elemdescFunc; + WORD wFuncFlags; +} +alias FUNCDESC * LPFUNCDESC; + +enum VARKIND { + VAR_PERINSTANCE, + VAR_STATIC, + VAR_CONST, + VAR_DISPATCH +} +/* IMPLTYPE Flags */ +const USHORT IMPLTYPEFLAG_FDEFAULT = 0x1; +const USHORT IMPLTYPEFLAG_FSOURCE = 0x2; +const USHORT IMPLTYPEFLAG_FRESTRICTED = 0x4; +const USHORT IMPLTYPEFLAG_FDEFAULTVTABLE= 0x8; + +union VD_u { + /* offset of variable within the instance */ + ULONG oInst; + VARIANT * lpvarValue; /* the value of the constant */ +} +struct VARDESC { + MEMBERID memid; + LPOLESTR lpstrSchema; + VD_u u; + ELEMDESC elemdescVar; + WORD wVarFlags; + VARKIND varkind; +} +alias VARDESC * LPVARDESC; + +enum TYPEFLAGS { + TYPEFLAG_FAPPOBJECT = 0x01, + TYPEFLAG_FCANCREATE = 0x02, + TYPEFLAG_FLICENSED = 0x04, + TYPEFLAG_FPREDECLID = 0x08, + TYPEFLAG_FHIDDEN = 0x10, + TYPEFLAG_FCONTROL = 0x20, + TYPEFLAG_FDUAL = 0x40, + TYPEFLAG_FNONEXTENSIBLE = 0x80, + TYPEFLAG_FOLEAUTOMATION = 0x100, + TYPEFLAG_FRESTRICTED = 0x200, + TYPEFLAG_FAGGREGATABLE = 0x400, + TYPEFLAG_FREPLACEABLE = 0x800, + TYPEFLAG_FDISPATCHABLE = 0x1000, + TYPEFLAG_FREVERSEBIND = 0x2000 +} + +enum FUNCFLAGS { + FUNCFLAG_FRESTRICTED = 0x1, + FUNCFLAG_FSOURCE = 0x2, + FUNCFLAG_FBINDABLE = 0x4, + FUNCFLAG_FREQUESTEDIT = 0x8, + FUNCFLAG_FDISPLAYBIND = 0x10, + FUNCFLAG_FDEFAULTBIND = 0x20, + FUNCFLAG_FHIDDEN = 0x40, + FUNCFLAG_FUSESGETLASTERROR = 0x80, + FUNCFLAG_FDEFAULTCOLLELEM = 0x100, + FUNCFLAG_FUIDEFAULT = 0x200, + FUNCFLAG_FNONBROWSABLE = 0x400, + FUNCFLAG_FREPLACEABLE = 0x800, + FUNCFLAG_FIMMEDIATEBIND = 0x1000 +} + +enum VARFLAGS { + VARFLAG_FREADONLY = 0x1, + VARFLAG_FSOURCE = 0x2, + VARFLAG_FBINDABLE = 0x4, + VARFLAG_FREQUESTEDIT = 0x8, + VARFLAG_FDISPLAYBIND = 0x10, + VARFLAG_FDEFAULTBIND = 0x20, + VARFLAG_FHIDDEN = 0x40, + VARFLAG_FRESTRICTED = 0x80, + VARFLAG_FDEFAULTCOLLELEM = 0x100, + VARFLAG_FUIDEFAULT = 0x200, + VARFLAG_FNONBROWSABLE = 0x400, + VARFLAG_FREPLACEABLE = 0x800, + VARFLAG_FIMMEDIATEBIND = 0x1000 +} + +struct CLEANLOCALSTORAGE { + IUnknown pInterface; /* interface that is responsible for storage */ + PVOID pStorage; /* the storage being managed by interface */ + DWORD flags; /* which interface, what storage */ +} + +struct CUSTDATAITEM { + GUID guid; /* guid identifying this custom data item */ + VARIANTARG varValue; /* value of this custom data item */ +} +alias CUSTDATAITEM * LPCUSTDATAITEM; + +struct CUSTDATA { + DWORD cCustData; /* number of custom data items in rgCustData */ + LPCUSTDATAITEM prgCustData; + /* array of custom data items */ +} +alias CUSTDATA * LPCUSTDATA; + + +interface ICreateTypeInfo: IUnknown +{ + HRESULT SetGuid( REFGUID guid ); + HRESULT SetTypeFlags( UINT uTypeFlags ); + HRESULT SetDocString( LPOLESTR pStrDoc ); + HRESULT SetHelpContext( DWORD dwHelpContext); + HRESULT SetVersion( WORD wMajorVerNum, WORD wMinorVerNum ); + HRESULT AddRefTypeInfo( ITypeInfo pTInfo, HREFTYPE * phRefType ); + HRESULT AddFuncDesc( UINT index, FUNCDESC * pFuncDesc ); + HRESULT AddImplType( UINT index, HREFTYPE hRefType ); + HRESULT SetImplTypeFlags( UINT index, INT implTypeFlags ); + HRESULT SetAlignment( WORD cbAlignment ); + HRESULT SetSchema( LPOLESTR pStrSchema ); + HRESULT AddVarDesc( UINT index, VARDESC * pVarDesc ); + HRESULT SetFuncAndParamNames( UINT index, LPOLESTR * rgszNames, UINT cNames ); + HRESULT SetVarName( UINT index, LPOLESTR szName ); + HRESULT SetTypeDescAlias( TYPEDESC * pTDescAlias ); + HRESULT DefineFuncAsDllEntry( UINT index,LPOLESTR szDllName,LPOLESTR szProcName ); + HRESULT SetFuncDocString( UINT index, LPOLESTR szDocString ); + HRESULT SetVarDocString(UINT index,LPOLESTR szDocString ); + HRESULT SetFuncHelpContext(UINT index,DWORD dwHelpContext ); + HRESULT SetVarHelpContext(UINT index,DWORD dwHelpContext ); + HRESULT SetMops(UINT index,BSTR bstrMops ); + HRESULT SetTypeIdldesc(IDLDESC * pIdlDesc ); + HRESULT LayOut(); +} +alias ICreateTypeInfo LPCREATETYPEINFO; + +interface ICreateTypeInfo2: ICreateTypeInfo +{ + HRESULT DeleteFuncDesc(UINT index); + HRESULT DeleteFuncDescByMemId(MEMBERID memid,INVOKEKIND invKind); + HRESULT DeleteVarDesc(UINT index); + HRESULT DeleteVarDescByMemId(MEMBERID memid); + HRESULT DeleteImplType(UINT index); + HRESULT SetCustData(REFGUID guid,VARIANT * pVarVal); + HRESULT SetFuncCustData(UINT index,REFGUID guid,VARIANT * pVarVal); + HRESULT SetParamCustData(UINT indexFunc,UINT indexParam,REFGUID guid,VARIANT * pVarVal); + HRESULT SetVarCustData(UINT index,REFGUID guid,VARIANT * pVarVal); + HRESULT SetImplTypeCustData(UINT index,REFGUID guid,VARIANT * pVarVal); + HRESULT SetHelpStringContext(ULONG dwHelpStringContext); + HRESULT SetFuncHelpStringContext(UINT index,ULONG dwHelpStringContext); + HRESULT SetVarHelpStringContext(UINT index,ULONG dwHelpStringContext); + HRESULT Invalidate(); + HRESULT SetName(LPOLESTR szName); +} +alias ICreateTypeInfo2 LPCREATETYPEINFO2; + +interface ICreateTypeLib : IUnknown +{ + HRESULT CreateTypeInfo(LPOLESTR szName,TYPEKIND tkind,ICreateTypeInfo * ppCTInfo); + HRESULT SetName(LPOLESTR szName); + HRESULT SetVersion(WORD wMajorVerNum,WORD wMinorVerNum); + HRESULT SetGuid(REFGUID guid); + HRESULT SetDocString( LPOLESTR szDoc); + HRESULT SetHelpFileName(LPOLESTR szHelpFileName); + HRESULT SetHelpContext(DWORD dwHelpContext); + HRESULT SetLcid(LCID lcid); + HRESULT SetLibFlags(UINT uLibFlags); + HRESULT SaveAllChanges(); +} +alias ICreateTypeLib LPCREATETYPELIB; + +interface ICreateTypeLib2 : ICreateTypeLib +{ + HRESULT DeleteTypeInfo(LPOLESTR szName); + HRESULT SetCustData(REFGUID guid,VARIANT * pVarVal); + HRESULT SetHelpStringContext(ULONG dwHelpStringContext); + HRESULT SetHelpStringDll(LPOLESTR szFileName); +} + +interface IDispatch : IUnknown +{ +HRESULT GetTypeInfoCount(UINT * pctinfo); +HRESULT GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo * ppTInfo); +HRESULT GetIDsOfNames(REFIID riid, LPOLESTR * rgszNames, UINT cNames, LCID lcid, DISPID * rgDispId); +HRESULT Invoke(DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS* pDispParams,VARIANT* pVarResult,EXCEPINFO* pExcepInfo,UINT* puArgErr); +} +alias IDispatch LPDISPATCH; +const DISPID DISPID_UNKNOWN = cast(DISPID)-1; +const DISPID DISPID_VALUE = cast(DISPID)0; +const DISPID DISPID_PROPERTYPUT = cast(DISPID)-3; +const DISPID DISPID_NEWENUM = cast(DISPID)-4; +const DISPID DISPID_EVALUATE = cast(DISPID)-5; +const DISPID DISPID_CONSTRUCTOR = cast(DISPID)-6; +const DISPID DISPID_DESTRUCTOR = cast(DISPID)-7; +const DISPID DISPID_COLLECT = cast(DISPID)-8; + +/+++++++++++++++++++++++++++++++++++++++ + +[ + object, + uuid(00020404-0000-0000-C000-000000000046), + pointer_default(unique) +] + +interface IEnumVARIANT : IUnknown +{ + typedef [unique] IEnumVARIANT* LPENUMVARIANT; + + [local] + HRESULT Next( + [in] ULONG celt, + [out, size_is(celt), length_is(*pCeltFetched)] VARIANT * rgVar, + [out] ULONG * pCeltFetched + ); + + [call_as(Next)] + HRESULT RemoteNext( + [in] ULONG celt, + [out, size_is(celt), length_is(*pCeltFetched)] VARIANT * rgVar, + [out] ULONG * pCeltFetched + ); + + HRESULT Skip( + [in] ULONG celt + ); + + HRESULT Reset( + ); + + HRESULT Clone( + [out] IEnumVARIANT ** ppEnum + ); +} + + ++/ +enum DESCKIND { + DESCKIND_NONE = 0, + DESCKIND_FUNCDESC, + DESCKIND_VARDESC, + DESCKIND_TYPECOMP, + DESCKIND_IMPLICITAPPOBJ, + DESCKIND_MAX +} + + +union BINDPTR { + FUNCDESC * lpfuncdesc; + VARDESC * lpvardesc; + ITypeComp lptcomp; +} +alias BINDPTR * LPBINDPTR; + +interface ITypeComp : IUnknown +{ + + HRESULT Bind(LPOLESTR szName,ULONG lHashVal,WORD wFlags, +ITypeInfo * ppTInfo,DESCKIND * pDescKind,BINDPTR * pBindPtr + ); + + + HRESULT BindType( LPOLESTR szName,ULONG lHashVal, + ITypeInfo * ppTInfo, + ITypeComp * ppTComp + ); + +} + +interface ITypeInfo : IUnknown +{ + HRESULT GetTypeAttr(TYPEATTR ** ppTypeAttr); + HRESULT GetTypeComp( ITypeComp * ppTComp ); + HRESULT GetFuncDesc( UINT index, FUNCDESC ** ppFuncDesc ); + HRESULT GetVarDesc( UINT index,VARDESC ** ppVarDesc); + HRESULT GetNames(MEMBERID memid,BSTR * rgBstrNames,UINT cMaxNames,UINT * pcNames); + HRESULT GetRefTypeOfImplType(UINT index,HREFTYPE * pRefType); + HRESULT GetImplTypeFlags(UINT index,INT * pImplTypeFlags); + HRESULT GetIDsOfNames(LPOLESTR * rgszNames,UINT cNames,MEMBERID * pMemId); + HRESULT Invoke(PVOID pvInstance,MEMBERID memid,WORD wFlags,DISPPARAMS * pDispParams,VARIANT * pVarResult,EXCEPINFO * pExcepInfo,UINT * puArgErr); + HRESULT GetDocumentation(MEMBERID memid,BSTR * pBstrName,BSTR * pBstrDocString,DWORD * pdwHelpContext,BSTR * pBstrHelpFile); + HRESULT GetDllEntry(MEMBERID memid,INVOKEKIND invKind,BSTR * pBstrDllName,BSTR * pBstrName,WORD * pwOrdinal); + HRESULT GetRefTypeInfo(HREFTYPE hRefType,ITypeInfo * ppTInfo); + HRESULT AddressOfMember(MEMBERID memid,INVOKEKIND invKind,PVOID * ppv); + HRESULT CreateInstance(IUnknown pUnkOuter,REFIID riid,PVOID * ppvObj); + HRESULT GetMops(MEMBERID memid,BSTR * pBstrMops); + HRESULT GetContainingTypeLib( ITypeLib ** ppTLib,UINT * pIndex); + void ReleaseTypeAttr(TYPEATTR * pTypeAttr ); + void ReleaseFuncDesc( FUNCDESC * pFuncDesc ); + void ReleaseVarDesc(VARDESC * pVarDesc ); +} +alias ITypeInfo LPTYPEINFO; + +interface ITypeInfo2 : ITypeInfo +{ + HRESULT GetTypeKind(TYPEKIND * pTypeKind); + HRESULT GetTypeFlags(ULONG * pTypeFlags); + HRESULT GetFuncIndexOfMemId(MEMBERID memid,INVOKEKIND invKind,UINT * pFuncIndex); + HRESULT GetVarIndexOfMemId(MEMBERID memid,UINT * pVarIndex); + HRESULT GetCustData(REFGUID guid,VARIANT * pVarVal); + HRESULT GetFuncCustData(UINT index,REFGUID guid,VARIANT * pVarVal); + HRESULT GetParamCustData(UINT indexFunc,UINT indexParam,REFGUID guid,VARIANT * pVarVal); + HRESULT GetVarCustData(UINT index,REFGUID guid,VARIANT * pVarVal); + HRESULT GetImplTypeCustData(UINT index,REFGUID guid,VARIANT * pVarVal); + HRESULT GetDocumentation2(MEMBERID memid,LCID lcid,BSTR *pbstrHelpString,DWORD *pdwHelpStringContext,BSTR *pbstrHelpStringDll); + HRESULT GetAllCustData(CUSTDATA * pCustData); + HRESULT GetAllFuncCustData(UINT index,CUSTDATA * pCustData); + HRESULT GetAllParamCustData(UINT indexFunc,UINT indexParam,CUSTDATA * pCustData); + HRESULT GetAllVarCustData(UINT index,CUSTDATA * pCustData); + HRESULT GetAllImplTypeCustData(UINT index,CUSTDATA * pCustData); +} + +alias ITypeInfo2 LPTYPEINFO2; + +enum SYSKIND { + SYS_WIN16 = 0, + SYS_WIN32, + SYS_MAC +} + +enum LIBFLAGS { + LIBFLAG_FRESTRICTED = 0x01, + LIBFLAG_FCONTROL = 0x02, + LIBFLAG_FHIDDEN = 0x04, + LIBFLAG_FHASDISKIMAGE = 0x08 +} + +struct TLIBATTR { + GUID guid; + LCID lcid; + SYSKIND syskind; + WORD wMajorVerNum; + WORD wMinorVerNum; + WORD wLibFlags; +} +alias TLIBATTR * LPTLIBATTR; + +interface ITypeLib : IUnknown +{ + UINT GetTypeInfoCount( + ); + + HRESULT GetTypeInfo( + UINT index, +ITypeInfo * ppTInfo + ); + +HRESULT GetTypeInfoType( + UINT index, + TYPEKIND * pTKind + ); + + HRESULT GetTypeInfoOfGuid( + REFGUID guid, + ITypeInfo * ppTinfo + ); + + HRESULT GetLibAttr( + TLIBATTR ** ppTLibAttr +); + + HRESULT GetTypeComp(ITypeComp * ppTComp ); + + HRESULT GetDocumentation(INT index,BSTR * pBstrName,BSTR * pBstrDocString,DWORD * pdwHelpContext,BSTR * pBstrHelpFile + ); + + HRESULT IsName(LPOLESTR szNameBuf,ULONG lHashVal,BOOL * pfName + ); + + HRESULT FindName( + LPOLESTR szNameBuf, + ULONG lHashVal, + ITypeInfo * ppTInfo, + MEMBERID * rgMemId, + USHORT * pcFound + ); + + void ReleaseTLibAttr( TLIBATTR * pTLibAttr ); +} + +alias ITypeLib LPTYPELIB; + +interface ITypeLib2 : ITypeLib +{ + HRESULT GetCustData(REFGUID guid,VARIANT * pVarVal); + HRESULT GetLibStatistics(ULONG * pcUniqueNames,ULONG * pcchUniqueNames); + HRESULT GetDocumentation2(INT index,LCID lcid,BSTR *pbstrHelpString,DWORD *pdwHelpStringContext,BSTR *pbstrHelpStringDll); + HRESULT GetAllCustData(CUSTDATA * pCustData); +} +alias ITypeLib2 LPTYPELIB2; + +enum CHANGEKIND { + CHANGEKIND_ADDMEMBER, + CHANGEKIND_DELETEMEMBER, + CHANGEKIND_SETNAMES, + CHANGEKIND_SETDOCUMENTATION, + CHANGEKIND_GENERAL, + CHANGEKIND_INVALIDATE, + CHANGEKIND_CHANGEFAILED, + CHANGEKIND_MAX, + ADDMEMBER = CHANGEKIND_ADDMEMBER, + DELETEMEMBER = CHANGEKIND_DELETEMEMBER, + SETNAMES = CHANGEKIND_SETNAMES, + SETDOCUMENTATION = CHANGEKIND_SETDOCUMENTATION, + GENERAL = CHANGEKIND_GENERAL, + INVALIDATE = CHANGEKIND_INVALIDATE, + CHANGEFAILED = CHANGEKIND_CHANGEFAILED, + MAX = CHANGEKIND_MAX +} + +interface ITypeChangeEvents: IUnknown +{ + // notification messages used by the dynamic typeinfo protocol. + HRESULT RequestTypeChange(CHANGEKIND changeKind,ITypeInfo pTInfoBefore,LPOLESTR pStrName,INT * pfCancel); + HRESULT AfterTypeChange(CHANGEKIND changeKind,ITypeInfo pTInfoAfter,LPOLESTR pStrName); +} +alias ITypeChangeEvents LPTYPECHANGEEVENTS; + +interface IErrorInfo: IUnknown +{ + HRESULT GetGUID( GUID * pGUID ); + HRESULT GetSource(BSTR * pBstrSource); + HRESULT GetDescription(BSTR * pBstrDescription); + HRESULT GetHelpFile(BSTR * pBstrHelpFile); + HRESULT GetHelpContext(DWORD * pdwHelpContext); +} +alias IErrorInfo LPERRORINFO; + +interface ICreateErrorInfo: IUnknown +{ + HRESULT SetGUID(REFGUID rguid); + HRESULT SetSource(LPOLESTR szSource); + HRESULT SetDescription(LPOLESTR szDescription); + HRESULT SetHelpFile(LPOLESTR szHelpFile); + HRESULT SetHelpContext(DWORD dwHelpContext); +} +alias ICreateErrorInfo LPCREATEERRORINFO; + +interface ISupportErrorInfo: IUnknown +{ + HRESULT InterfaceSupportsErrorInfo(REFIID riid); +} +alias ISupportErrorInfo LPSUPPORTERRORINFO; + +interface ITypeFactory : IUnknown +{ + HRESULT CreateFromTypeInfo(ITypeInfo pTypeInfo,REFIID riid, IUnknown *ppv); +} + +interface ITypeMarshal : IUnknown +{ + HRESULT Size(PVOID pvType,DWORD dwDestContext,PVOID pvDestContext,ULONG * pSize); + HRESULT Marshal(PVOID pvType,DWORD dwDestContext,PVOID pvDestContext,ULONG cbBufferLength,BYTE * pBuffer,ULONG * pcbWritten); + HRESULT Unmarshal(PVOID pvType,DWORD dwFlags,ULONG cbBufferLength,BYTE * pBuffer,ULONG * pcbRead); + HRESULT Free(PVOID pvType); +} + + +interface IRecordInfo: IUnknown +{ + HRESULT RecordInit(PVOID pvNew); + HRESULT RecordClear(PVOID pvExisting); + HRESULT RecordCopy(PVOID pvExisting,PVOID pvNew); + HRESULT GetGuid(GUID * pguid); + HRESULT GetName(BSTR * pbstrName); + HRESULT GetSize(ULONG * pcbSize); + HRESULT GetTypeInfo(ITypeInfo * ppTypeInfo); + HRESULT GetField(PVOID pvData,LPCOLESTR szFieldName,VARIANT * pvarField); + HRESULT GetFieldNoCopy(PVOID pvData,LPCOLESTR szFieldName,VARIANT * pvarField,PVOID * ppvDataCArray); + HRESULT PutField(ULONG wFlags,PVOID pvData,LPCOLESTR szFieldName,VARIANT * pvarField); + HRESULT PutFieldNoCopy(ULONG wFlags,PVOID pvData,LPCOLESTR szFieldName,VARIANT * pvarField); + HRESULT GetFieldNames(ULONG * pcNames,BSTR * rgBstrNames); + BOOL IsMatchingType(IRecordInfo pRecordInfo); + PVOID RecordCreate(); + HRESULT RecordCreateCopy(PVOID pvSource,PVOID * ppvDest); + HRESULT RecordDestroy(PVOID pvRecord); +} +alias IRecordInfo LPRECORDINFO; + +} // extern(WIndows); + +