346 lines
12 KiB
C
346 lines
12 KiB
C
/*
|
|
* Defines the COM interfaces and APIs related to IDataObject.
|
|
*
|
|
*/
|
|
|
|
#ifndef __WINE_WINE_OBJ_DATAOBJECT_H
|
|
#define __WINE_WINE_OBJ_DATAOBJECT_H
|
|
|
|
#include "wine/obj_base.h"
|
|
#include "wine/obj_moniker.h"
|
|
#include "wine/obj_storage.h"
|
|
|
|
#if defined(__cplusplus) && !defined(NONAMELESSUNION)
|
|
#define DUMMYUNIONNAME
|
|
#else /* defined(__cplusplus) && !defined(NONAMELESSUNION) */
|
|
#define DUMMYUNIONNAME u
|
|
#endif /* defined(__cplusplus) && !defined(NONAMELESSUNION) */
|
|
|
|
#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
|
|
|
|
#ifdef ICOM_CINTERFACE
|
|
/*** 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)
|
|
#endif
|
|
|
|
|
|
/*****************************************************************************
|
|
* 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
|
|
|
|
#ifdef ICOM_CINTERFACE
|
|
/*** 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)
|
|
#endif
|
|
|
|
|
|
/*****************************************************************************
|
|
* 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
|
|
|
|
#ifdef ICOM_CINTERFACE
|
|
/*** 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)
|
|
#endif
|
|
|
|
/* 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
|
|
|
|
#ifdef ICOM_CINTERFACE
|
|
/*** 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)
|
|
#endif
|
|
|
|
|
|
/*****************************************************************************
|
|
* 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
|
|
|
|
#ifdef ICOM_CINTERFACE
|
|
/*** 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)
|
|
#endif
|
|
|
|
|
|
/*****************************************************************************
|
|
* 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
|
|
|
|
#ifdef ICOM_CINTERFACE
|
|
/*** 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)
|
|
#endif
|
|
|
|
|
|
/*****************************************************************************
|
|
* 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 */
|