/* * Defines the COM interfaces and APIs related to IDataObject. * * Depends on 'obj_moniker.h', 'obj_storage.h' and 'obj_base.h'. */ #ifndef __WINE_WINE_OBJ_DATAOBJECT_H #define __WINE_WINE_OBJ_DATAOBJECT_H /***************************************************************************** * Predeclare the structures */ typedef struct DVTARGETDEVICE32 DVTARGETDEVICE32, *LPDVTARGETDEVICE32; DECL_WINELIB_TYPE(DVTARGETDEVICE) DECL_WINELIB_TYPE(LPDVTARGETDEVICE) typedef struct FORMATETC32 FORMATETC32, *LPFORMATETC32; DECL_WINELIB_TYPE(FORMATETC) DECL_WINELIB_TYPE(LPFORMATETC) typedef struct STGMEDIUM32 STGMEDIUM32, *LPSTGMEDIUM32; DECL_WINELIB_TYPE(STGMEDIUM) DECL_WINELIB_TYPE(LPSTGMEDIUM) /***************************************************************************** * Predeclare the interfaces */ DEFINE_OLEGUID(IID_IAdviseSink, 0x0000010fL, 0, 0); typedef struct IAdviseSink IAdviseSink,*LPADVISESINK; DEFINE_OLEGUID(IID_IAdviseSink2, 0x00000125L, 0, 0); typedef struct IAdviseSink2 IAdviseSink2,*LPADVISESINK2; DEFINE_OLEGUID(IID_IDataAdviseHolder, 0x00000110L, 0, 0); typedef struct IDataAdviseHolder IDataAdviseHolder,*LPDATAADVISEHOLDER; DEFINE_OLEGUID(IID_IDataObject, 0x0000010EL, 0, 0); typedef struct IDataObject IDataObject,*LPDATAOBJECT; DEFINE_OLEGUID(IID_IEnumFORMATETC, 0x00000103L, 0, 0); typedef struct IEnumFORMATETC IEnumFORMATETC,*LPENUMFORMATETC; DEFINE_OLEGUID(IID_IEnumSTATDATA, 0x00000105L, 0, 0); typedef struct IEnumSTATDATA IEnumSTATDATA,*LPENUMSTATDATA; /***************************************************************************** * DVTARGETDEVICE structure */ struct DVTARGETDEVICE32 { DWORD tdSize; WORD tdDriverNameOffset; WORD tdDeviceNameOffset; WORD tdPortNameOffset; WORD tdExtDevmodeOffset; BYTE tdData[1]; }; /***************************************************************************** * FORMATETC structure */ /* wished data format */ struct FORMATETC32 { CLIPFORMAT32 cfFormat; DVTARGETDEVICE32* ptd; DWORD dwAspect; LONG lindex; DWORD tymed; }; /***************************************************************************** * STGMEDIUM structure */ typedef enum tagTYMED { TYMED_HGLOBAL = 1, TYMED_FILE = 2, TYMED_ISTREAM = 4, TYMED_ISTORAGE = 8, TYMED_GDI = 16, TYMED_MFPICT = 32, TYMED_ENHMF = 64, TYMED_NULL = 0 } TYMED; /* dataobject as answer to a request */ struct STGMEDIUM32 { DWORD tymed; union { HBITMAP32 hBitmap; HMETAFILEPICT32 hMetaFilePict; HENHMETAFILE32 hEnhMetaFile; HGLOBAL32 hGlobal; LPOLESTR32 lpszFileName; IStream32 *pstm; IStorage32 *pstg; } u; IUnknown *pUnkForRelease; }; /***************************************************************************** * IAdviseSink interface */ /* FIXME: not implemented */ /***************************************************************************** * IAdviseSink2 interface */ /* FIXME: not implemented */ /***************************************************************************** * IDataAdviseHolder interface */ /* FIXME: not implemented */ /***************************************************************************** * IDataObject interface */ #define ICOM_INTERFACE IDataObject ICOM_BEGIN(IDataObject,IUnknown) ICOM_METHOD2(HRESULT,GetData, LPFORMATETC32,pformatetcIn, STGMEDIUM32*,pmedium); ICOM_METHOD2(HRESULT,GetDataHere, LPFORMATETC32,pformatetc, STGMEDIUM32*,pmedium); ICOM_METHOD1(HRESULT,QueryGetData, LPFORMATETC32,pformatetc); ICOM_METHOD2(HRESULT,GetCanonicalFormatEtc, LPFORMATETC32,pformatectIn, LPFORMATETC32,pformatetcOut); ICOM_METHOD3(HRESULT,SetData, LPFORMATETC32,pformatetc, STGMEDIUM32*,pmedium, BOOL32,fRelease); ICOM_METHOD2(HRESULT,EnumFormatEtc, DWORD,dwDirection, IEnumFORMATETC**,ppenumFormatEtc); ICOM_METHOD4(HRESULT,DAdvise, LPFORMATETC32*,pformatetc, DWORD,advf, IAdviseSink*,pAdvSink, DWORD*,pdwConnection); ICOM_METHOD1(HRESULT,DUnadvise, DWORD,dwConnection); ICOM_METHOD1(HRESULT,EnumDAdvise, IEnumSTATDATA**,ppenumAdvise); ICOM_END(IDataObject) #undef ICOM_INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IDataObject_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b) #define IDataObject_AddRef(p) ICOM_ICALL (IUnknown,AddRef,p) #define IDataObject_Release(p) ICOM_ICALL (IUnknown,Release,p) /*** IDataObject methods ***/ #define IDataObject_GetData(p,a,b) ICOM_CALL2(GetData,p,a,b) #define IDataObject_GetDataHere(p,a,b) ICOM_CALL2(GetDataHere,p,a,b) #define IDataObject_QueryGetData(p,a) ICOM_CALL1(QueryGetData,p,a) #define IDataObject_GetCanonicalFormatEtc(p,a,b) ICOM_CALL2(GetCanonicalFormatEtc,p,a,b) #define IDataObject_SetData(p,a,b,c) ICOM_CALL3(SetData,p,a,b,c) #define IDataObject_EnumFormatEtc(p,a,b) ICOM_CALL2(EnumFormatEtc,p,a,b) #define IDataObject_DAdvise(p,a,b,c,d) ICOM_CALL4(DAdvise,p,a,b,c,d) #define IDataObject_DUnadvise(p,a) ICOM_CALL1(DUnadvise,p,a) #define IDataObject_EnumDAdvise(p,a) ICOM_CALL1(EnumDAdvise,p,a) #endif /***************************************************************************** * IEnumFORMATETC interface */ #define ICOM_INTERFACE IEnumFORMATETC ICOM_BEGIN(IEnumFORMATETC,IUnknown) ICOM_METHOD3(HRESULT,Next, ULONG,celt, FORMATETC32*,rgelt, ULONG*,pceltFethed); ICOM_METHOD1(HRESULT,Skip, ULONG,celt); ICOM_METHOD (HRESULT,Reset); ICOM_METHOD1(HRESULT,Clone, IEnumFORMATETC**,ppenum); ICOM_END(IEnumFORMATETC) #undef ICOM_INTERFACE #if !defined(__cplusplus) || defined(CINTERFACE) /*** IUnknown methods ***/ #define IEnumFORMATETC_QueryInterface(p,a,b) ICOM_ICALL2(IUnknown,QueryInterface,p,a,b) #define IEnumFORMATETC_AddRef(p) ICOM_ICALL (IUnknown,AddRef,p) #define IEnumFORMATETC_Release(p) ICOM_ICALL (IUnknown,Release,p) /*** IEnumFORMATETC methods ***/ #define IEnumFORMATETC_Next(p,a,b,c) ICOM_CALL3(Next,p,a,b,c) #define IEnumFORMATETC_Skip(p,a) ICOM_CALL1(Skip,p,a) #define IEnumFORMATETC_Reset(p) ICOM_CALL (Reset,p) #define IEnumFORMATETC_Clone(p,a) ICOM_CALL1(Clone,p,a) #endif /***************************************************************************** * IEnumSTATDATA interface */ /* FIXME: not implemented */ #endif /* __WINE_WINE_OBJ_DATAOBJECT_H */