/* * Defines the COM interfaces and APIs related to OLE automation support. * * Depends on 'obj_base.h'. */ #ifndef __WINE_WINE_OBJ_OLEAUT_H #define __WINE_WINE_OBJ_OLEAUT_H #include "windows.h" #include "wintypes.h" /***************************************************************************** * Predeclare the interfaces */ DEFINE_OLEGUID(IID_IDispatch, 0x00020400,0,0); typedef struct IDispatch IDispatch,*LPDISPATCH; DEFINE_OLEGUID(IID_ITypeInfo, 0x00020401,0,0); typedef struct ITypeInfo ITypeInfo,*LPTYPEINFO; DEFINE_OLEGUID(IID_ITypeLib, 0x00020402,0,0); typedef struct ITypeLib ITypeLib,*LPTYPELIB; DEFINE_OLEGUID(IID_ITypeComp, 0x00020403,0,0); typedef struct ITypeComp ITypeComp,*LPTYPECOMP; DEFINE_OLEGUID(IID_IEnumVariant, 0x00020404,0,0); typedef struct IenumVariant IEnumVariant,*LPENUMVARIANT; DEFINE_OLEGUID(IID_ICreateTypeInfo, 0x00020405,0,0); typedef struct ICreateTypeInfo ICreateTypeInfo,*LPCREATETYPEINFO; DEFINE_OLEGUID(IID_ICreateTypeLib, 0x00020406,0,0); typedef struct ICreateTypeLib ICreateTypeLib,*LPCREATETYPELIB; DEFINE_OLEGUID(IID_ICreateTypeInfo2,0x0002040E,0,0); typedef struct ICreateTypeInfo2 ICreateTypeInfo2,*LPCREATETYPEINFO2; DEFINE_OLEGUID(IID_ICreateTypeLib2, 0x0002040F,0,0); typedef struct ICreateTypeLib2 ICreateTypeLib2,*LPCREATETYPELIB2; DEFINE_OLEGUID(IID_ITypeChangeEvents,0x00020410,0,0); typedef struct ITypeChangeEvents ITypeChangeEvents,*LPTYPECHANGEEVENTS; DEFINE_OLEGUID(IID_ITypeLib2, 0x00020411,0,0); typedef struct ITypeLib2 ITypeLib2,*LPTYPELIB2; DEFINE_OLEGUID(IID_ITypeInfo2, 0x00020412,0,0); typedef struct ITypeInfo2 ITypeInfo2,*LPTYPEINFO2; DEFINE_GUID(IID_IErrorInfo, 0x1CF2B120,0x547D,0x101B,0x8E,0x65, 0x08,0x00, 0x2B,0x2B,0xD1,0x19); typedef struct IErrorInfo IErrorInfo,*LPERRORINFO; DEFINE_GUID(IID_ICreateErrorInfo, 0x22F03340,0x547D,0x101B,0x8E,0x65, 0x08,0x00, 0x2B,0x2B,0xD1,0x19); typedef struct ICreateErrorInfo ICreateErrorInfo,*LPCREATEERRORINFO; DEFINE_GUID(IID_ISupportErrorInfo, 0xDF0B3D60,0x547D,0x101B,0x8E,0x65, 0x08,0x00, 0x2B,0x2B,0xD1,0x19); typedef struct ISupportErrorInfo ISupportErrorInfo,*LPSUPPORTERRORINFO; /***************************************************************************** * Automation data types */ /***************************************************************** * SafeArray defines and structs */ #define FADF_AUTO ( 0x1 ) #define FADF_STATIC ( 0x2 ) #define FADF_EMBEDDED ( 0x4 ) #define FADF_FIXEDSIZE ( 0x10 ) #define FADF_BSTR ( 0x100 ) #define FADF_UNKNOWN ( 0x200 ) #define FADF_DISPATCH ( 0x400 ) #define FADF_VARIANT ( 0x800 ) #define FADF_RESERVED ( 0xf0e8 ) typedef struct tagSAFEARRAYBOUND { ULONG cElements; /* Number of elements in dimension */ LONG lLbound; /* Lower bound of dimension */ } SAFEARRAYBOUND; typedef struct tagSAFEARRAY { USHORT cDims; /* Count of array dimension */ USHORT fFeatures; /* Flags describing the array */ ULONG cbElements; /* Size of each element */ ULONG cLocks; /* Number of lock on array */ PVOID pvData; /* Pointer to data valid when cLocks > 0 */ SAFEARRAYBOUND rgsabound[ 1 ]; /* One bound for each dimension */ } SAFEARRAY, *LPSAFEARRAY; /* * Data types for Variants. */ 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_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_VECTOR = 0x1000, VT_ARRAY = 0x2000, VT_BYREF = 0x4000, VT_RESERVED = 0x8000, VT_ILLEGAL = 0xffff, VT_ILLEGALMASKED = 0xfff, VT_TYPEMASK = 0xfff }; /* the largest valide type */ #define VT_MAXVALIDTYPE VT_CLSID /* * Declarations of the VARIANT structure and the VARIANT APIs. */ /* S_OK : Success. * DISP_E_BADVARTYPE : The variant type vt in not a valid type of variant. * DISP_E_OVERFLOW : The data pointed to by pvarSrc does not fit in the destination type. * DISP_E_TYPEMISMATCH : The variant type vt is not a valid type of variant. * E_INVALIDARG : One argument is invalid. * E_OUTOFMEMORY : Memory could not be allocated for the conversion. * DISP_E_ARRAYISLOCKED : The variant contains an array that is locked. */ #ifdef __cplusplus #define _wine_tagVARIANT_UNION_NAME #else #define _wine_tagVARIANT_UNION_NAME u #endif /* end FIXME */ typedef struct tagVARIANT VARIANT, *LPVARIANT; typedef struct tagVARIANT VARIANTARG, *LPVARIANTARG; struct tagVARIANT { VARTYPE vt; WORD wReserved1; WORD wReserved2; WORD wReserved3; union _wine_tagVARIANT_UNION_NAME { /* By value. */ CHAR cVal; USHORT uiVal; ULONG ulVal; INT intVal; UINT uintVal; BYTE bVal; short iVal; long lVal; float fltVal; double dblVal; VARIANT_BOOL boolVal; SCODE scode; DATE date; BSTR bstrVal; CY cyVal; /* DECIMAL decVal; IUnknown* punkVal; IDispatch* pdispVal; */ SAFEARRAY* parray; /* By reference */ CHAR* pcVal; USHORT* puiVal; ULONG* pulVal; INT* pintVal; UINT* puintVal; BYTE* pbVal; short* piVal; long* plVal; float* pfltVal; double* pdblVal; VARIANT_BOOL* pboolVal; SCODE* pscode; DATE* pdate; BSTR* pbstrVal; VARIANT* pvarVal; PVOID byref; CY* pcyVal; /* DECIMAL* pdecVal; IUnknown** ppunkVal; IDispatch** ppdispVal; */ SAFEARRAY** pparray; } _wine_tagVARIANT_UNION_NAME; }; typedef LONG DISPID; typedef struct tagDISPPARAMS { VARIANTARG* rgvarg; DISPID* rgdispidNamedArgs; UINT cArgs; UINT cNamedArgs; } DISPPARAMS; typedef struct tagEXCEPINFO { WORD wCode; WORD wReserved; BSTR bstrSource; BSTR bstrDescription; BSTR bstrHelpFile; DWORD dwHelpContext; PVOID pvReserved; HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *); SCODE scode; } EXCEPINFO, * LPEXCEPINFO; /***************************************************************************** * IDispatch interface */ #define ICOM_INTERFACE IDispatch #define IDispatch_METHODS \ ICOM_METHOD1(HRESULT, GetTypeInfoCount, UINT*, pctinfo); \ ICOM_METHOD3(HRESULT, GetTypeInfo, UINT, iTInfo, LCID, lcid, ITypeInfo**, ppTInfo); \ ICOM_METHOD5(HRESULT, GetIDsOfNames, REFIID, riid, LPOLESTR*, rgszNames, UINT, cNames, LCID, lcid, DISPID*, rgDispId); \ ICOM_METHOD8(HRESULT, Invoke, DISPID, dispIdMember, REFIID, riid, LCID, lcid, WORD, wFlags, DISPPARAMS*, pDispParams, VARIANT*, pVarResult, EXCEPINFO*, pExepInfo, UINT*, puArgErr); #define IDispatch_IMETHODS \ ICOM_INHERITS(IDispatch,IUnknown) ICOM_DEFINE(IDispatch,IUnknown) #undef ICOM_INTERFACE #ifdef ICOM_CINTERFACE /*** IUnknown methods ***/ #define IDispatch_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) #define IDispatch_AddRef(p) ICOM_CALL (AddRef,p) #define IDispatch_Release(p) ICOM_CALL (Release,p) /*** IDispatch methods ***/ #define IDispatch_GetTypeInfoCount(p,a) ICOM_CALL1 (GetTypeInfoCount,p,a) #define IDispatch_GetTypeInfo(p,a,b,c) ICOM_CALL3 (GetTypeInfo,p,b,c) #define IDispatch_GetIDsOfNames(p,a,b,c,d,e) ICOM_CALL5 (GetIDsOfNames,p,a,b,c,d,e) #define IDispatch_Invoke(p,a,b,c,d,e,f,g,h) ICOM_CALL8 (Invoke,p,a,b,c,d,e,f,g,h) #endif #endif /* __WINE_WINE_OBJ_OLEAUT_H */