/* * Defines the COM interfaces and APIs related to IDataObject. * */ #ifndef __WINE_WINE_OBJ_DATAOBJECT_H #define __WINE_WINE_OBJ_DATAOBJECT_H #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ /***************************************************************************** * Predeclare the structures */ typedef enum tagDATADIR { DATADIR_GET = 1, DATADIR_SET = 2 } DATADIR; typedef struct DVTARGETDEVICE16 DVTARGETDEVICE16, *LPDVTARGETDEVICE16; typedef struct DVTARGETDEVICE DVTARGETDEVICE, *LPDVTARGETDEVICE; typedef struct FORMATETC16 FORMATETC16, *LPFORMATETC16; typedef struct FORMATETC FORMATETC, *LPFORMATETC; typedef struct STGMEDIUM STGMEDIUM, *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 DVTARGETDEVICE { DWORD tdSize; WORD tdDriverNameOffset; WORD tdDeviceNameOffset; WORD tdPortNameOffset; WORD tdExtDevmodeOffset; BYTE tdData[1]; }; /***************************************************************************** * FORMATETC structure */ /* wished data format */ struct FORMATETC { CLIPFORMAT cfFormat; DVTARGETDEVICE* 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; typedef struct tagRemSTGMEDIUM { DWORD tymed; DWORD dwHandleType; unsigned long pData; unsigned long pUnkForRelease; unsigned long cbData; byte data[1]; } RemSTGMEDIUM; /* dataobject as answer to a request */ struct STGMEDIUM { DWORD tymed; union { HBITMAP hBitmap; HMETAFILEPICT hMetaFilePict; HENHMETAFILE hEnhMetaFile; HGLOBAL hGlobal; LPOLESTR lpszFileName; IStream *pstm; IStorage *pstg; } DUMMYUNIONNAME; IUnknown *pUnkForRelease; }; typedef enum tagADVF { ADVF_NODATA = 1, ADVF_PRIMEFIRST = 2, ADVF_ONLYONCE = 4, ADVF_DATAONSTOP = 64, ADVFCACHE_NOHANDLER = 8, ADVFCACHE_FORCEBUILTIN = 16, ADVFCACHE_ONSAVE = 32 } ADVF; typedef struct tagSTATDATA { FORMATETC formatetc; DWORD advf; IAdviseSink *pAdvSink; DWORD dwConnection; } STATDATA, *LPSTATDATA; /***************************************************************************** * IAdviseSink interface */ #define ICOM_INTERFACE IAdviseSink #define IAdviseSink_METHODS \ ICOM_VMETHOD2(OnDataChange, FORMATETC*,pFormatetc, STGMEDIUM*,pStgmed) \ ICOM_VMETHOD2(OnViewChange, DWORD,dwAspect, LONG,lindex) \ ICOM_VMETHOD1(OnRename, IMoniker*,pmk) \ ICOM_VMETHOD (OnSave) \ ICOM_VMETHOD (OnClose) #define IAdviseSink_IMETHODS \ IUnknown_IMETHODS \ IAdviseSink_METHODS ICOM_DEFINE(IAdviseSink,IUnknown) #undef ICOM_INTERFACE /*** IUnknown methods ***/ #define IAdviseSink_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) #define IAdviseSink_AddRef(p) ICOM_CALL (AddRef,p) #define IAdviseSink_Release(p) ICOM_CALL (Release,p) /*** IAdviseSink methods ***/ #define IAdviseSink_OnDataChange(p,a,b) ICOM_CALL2(OnDataChange,p,a,b) #define IAdviseSink_OnViewChange(p,a,b) ICOM_CALL2(OnViewChange,p,a,b) #define IAdviseSink_OnRename(p,a) ICOM_CALL1(OnRename,p,a) #define IAdviseSink_OnSave(p) ICOM_CALL (OnSave,p) #define IAdviseSink_OnClose(p) ICOM_CALL (OnClose,p) /***************************************************************************** * IAdviseSink2 interface */ #define ICOM_INTERFACE IAdviseSink2 #define IAdviseSink2_METHODS \ ICOM_VMETHOD1(OnLinkSrcChange, IMoniker*,pmk) #define IAdviseSink2_IMETHODS \ IAdviseSink_IMETHODS \ IAdviseSink2_METHODS ICOM_DEFINE(IAdviseSink2,IAdviseSink) #undef ICOM_INTERFACE /*** IUnknown methods ***/ #define IAdviseSink2_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) #define IAdviseSink2_AddRef(p) ICOM_CALL (AddRef,p) #define IAdviseSink2_Release(p) ICOM_CALL (Release,p) /*** IAdviseSink methods ***/ #define IAdviseSink2_OnDataChange(p,a,b) ICOM_CALL2(IAdviseSink,OnDataChange,p,a,b) #define IAdviseSink2_OnViewChange(p,a,b) ICOM_CALL2(IAdviseSink,OnViewChange,p,a,b) #define IAdviseSink2_OnRename(p,a) ICOM_CALL1(IAdviseSink,OnRename,p,a) #define IAdviseSink2_OnSave(p) ICOM_CALL (IAdviseSink,OnSave,p) #define IAdviseSink2_OnClose(p) ICOM_CALL (IAdviseSink,OnClose,p) /*** IAdviseSink2 methods ***/ #define IAdviseSink2_OnLinkSrcChange(p,a) ICOM_CALL(OnLinkSrcChange,p,a) /***************************************************************************** * IDataAdviseHolder interface */ #define ICOM_INTERFACE IDataAdviseHolder #define IDataAdviseHolder_METHODS \ ICOM_METHOD5(HRESULT,Advise, IDataObject*,pDataObject, FORMATETC*,pFetc, DWORD,advf, IAdviseSink*,pAdvise, DWORD*,pdwConnection) \ ICOM_METHOD1(HRESULT,Unadvise, DWORD,dwConnection) \ ICOM_METHOD1(HRESULT,EnumAdvise, IEnumSTATDATA**,ppenumAdvise) \ ICOM_METHOD3(HRESULT,SendOnDataChange, IDataObject*,pDataObject, DWORD,dwReserved, DWORD,advf) #define IDataAdviseHolder_IMETHODS \ IUnknown_IMETHODS \ IDataAdviseHolder_METHODS ICOM_DEFINE(IDataAdviseHolder,IUnknown) #undef ICOM_INTERFACE /*** IUnknown methods ***/ #define IDataAdviseHolder_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) #define IDataAdviseHolder_AddRef(p) ICOM_CALL (AddRef,p) #define IDataAdviseHolder_Release(p) ICOM_CALL (Release,p) /*** IDataAdviseHolder methods ***/ #define IDataAdviseHolder_Advise(p,a,b,c,d,e) ICOM_CALL5(Advise,p,a,b,c,d,e) #define IDataAdviseHolder_Unadvise(p,a) ICOM_CALL1(Unadvise,p,a) #define IDataAdviseHolder_EnumAdvise(p,a) ICOM_CALL1(EnumAdvise,p,a) #define IDataAdviseHolder_SendOnDataChange(p,a,b,c) ICOM_CALL3(SendOnDataChange,p,a,b,c) /* FIXME: not implemented */ HRESULT WINAPI CreateDataAdviseHolder(LPDATAADVISEHOLDER* ppDAHolder); /***************************************************************************** * IDataObject interface */ #define ICOM_INTERFACE IDataObject #define IDataObject_METHODS \ ICOM_METHOD2(HRESULT,GetData, LPFORMATETC,pformatetcIn, STGMEDIUM*,pmedium) \ ICOM_METHOD2(HRESULT,GetDataHere, LPFORMATETC,pformatetc, STGMEDIUM*,pmedium) \ ICOM_METHOD1(HRESULT,QueryGetData, LPFORMATETC,pformatetc) \ ICOM_METHOD2(HRESULT,GetCanonicalFormatEtc, LPFORMATETC,pformatectIn, LPFORMATETC,pformatetcOut) \ ICOM_METHOD3(HRESULT,SetData, LPFORMATETC,pformatetc, STGMEDIUM*,pmedium, BOOL,fRelease) \ ICOM_METHOD2(HRESULT,EnumFormatEtc, DWORD,dwDirection, IEnumFORMATETC**,ppenumFormatEtc) \ ICOM_METHOD4(HRESULT,DAdvise, FORMATETC*,pformatetc, DWORD,advf, IAdviseSink*,pAdvSink, DWORD*,pdwConnection) \ ICOM_METHOD1(HRESULT,DUnadvise, DWORD,dwConnection) \ ICOM_METHOD1(HRESULT,EnumDAdvise, IEnumSTATDATA**,ppenumAdvise) #define IDataObject_IMETHODS \ IUnknown_IMETHODS \ IDataObject_METHODS ICOM_DEFINE(IDataObject,IUnknown) #undef ICOM_INTERFACE /*** IUnknown methods ***/ #define IDataObject_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) #define IDataObject_AddRef(p) ICOM_CALL (AddRef,p) #define IDataObject_Release(p) ICOM_CALL (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) /***************************************************************************** * IEnumFORMATETC interface */ #define ICOM_INTERFACE IEnumFORMATETC #define IEnumFORMATETC_METHODS \ ICOM_METHOD3(HRESULT,Next, ULONG,celt, FORMATETC*,rgelt, ULONG*,pceltFethed) \ ICOM_METHOD1(HRESULT,Skip, ULONG,celt) \ ICOM_METHOD (HRESULT,Reset) \ ICOM_METHOD1(HRESULT,Clone, IEnumFORMATETC**,ppenum) #define IEnumFORMATETC_IMETHODS \ IUnknown_IMETHODS \ IEnumFORMATETC_METHODS ICOM_DEFINE(IEnumFORMATETC,IUnknown) #undef ICOM_INTERFACE /*** IUnknown methods ***/ #define IEnumFORMATETC_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) #define IEnumFORMATETC_AddRef(p) ICOM_CALL (AddRef,p) #define IEnumFORMATETC_Release(p) ICOM_CALL (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) /***************************************************************************** * IEnumSTATDATA interface */ #define ICOM_INTERFACE IEnumSTATDATA #define IEnumSTATDATA_METHODS \ ICOM_METHOD3(HRESULT,Next, ULONG,celt, STATDATA*,rgelt, ULONG*,pceltFethed) \ ICOM_METHOD1(HRESULT,Skip, ULONG,celt) \ ICOM_METHOD (HRESULT,Reset) \ ICOM_METHOD1(HRESULT,Clone, IEnumSTATDATA**,ppenum) #define IEnumSTATDATA_IMETHODS \ IUnknown_IMETHODS \ IEnumSTATDATA_METHODS ICOM_DEFINE(IEnumSTATDATA,IUnknown) #undef ICOM_INTERFACE /*** IUnknown methods ***/ #define IEnumSTATDATA_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) #define IEnumSTATDATA_AddRef(p) ICOM_CALL (AddRef,p) #define IEnumSTATDATA_Release(p) ICOM_CALL (Release,p) /*** IEnumSTATDATA methods ***/ #define IEnumSTATDATA_Next(p,a,b,c) ICOM_CALL3(Next,p,a,b,c) #define IEnumSTATDATA_Skip(p,a) ICOM_CALL1(Skip,p,a) #define IEnumSTATDATA_Reset(p) ICOM_CALL (Reset,p) #define IEnumSTATDATA_Clone(p,a) ICOM_CALL1(Clone,p,a) /***************************************************************************** * Additional API */ /* FIXME: not implemented */ HRESULT WINAPI CreateDataCache(LPUNKNOWN pUnkOuter, REFCLSID rclsid, REFIID iid, LPVOID* ppv); #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ #endif /* __WINE_WINE_OBJ_DATAOBJECT_H */