130 lines
5.3 KiB
C
130 lines
5.3 KiB
C
/*
|
|
* Defines the COM interfaces and APIs that allow an interface to
|
|
* specify a custom marshaling for its objects.
|
|
*
|
|
* Copyright (C) 1999 Francois Gouget
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#ifndef __WINE_WINE_OBJ_MARSHAL_H
|
|
#define __WINE_WINE_OBJ_MARSHAL_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* defined(__cplusplus) */
|
|
|
|
/*****************************************************************************
|
|
* Predeclare the interfaces
|
|
*/
|
|
DEFINE_OLEGUID(IID_IMarshal, 0x00000003L, 0, 0);
|
|
typedef struct IMarshal IMarshal,*LPMARSHAL;
|
|
|
|
DEFINE_OLEGUID(IID_IStdMarshalInfo, 0x00000018L, 0, 0);
|
|
typedef struct IStdMarshalInfo IStdMarshalInfo,*LPSTDMARSHALINFO;
|
|
|
|
DEFINE_OLEGUID(CLSID_DfMarshal, 0x0000030BL, 0, 0);
|
|
|
|
|
|
/*****************************************************************************
|
|
* IMarshal interface
|
|
*/
|
|
#define ICOM_INTERFACE IMarshal
|
|
#define IMarshal_METHODS \
|
|
ICOM_METHOD6(HRESULT,GetUnmarshalClass, REFIID,riid, void*,pv, DWORD,dwDestContext, void*,pvDestContext, DWORD,mshlflags, CLSID*,pCid) \
|
|
ICOM_METHOD6(HRESULT,GetMarshalSizeMax, REFIID,riid, void*,pv, DWORD,dwDestContext, void*,pvDestContext, DWORD,mshlflags, DWORD*,pSize) \
|
|
ICOM_METHOD6(HRESULT,MarshalInterface, IStream*,pStm, REFIID,riid, void*,pv, DWORD,dwDestContext, void*,pvDestContext, DWORD,mshlflags) \
|
|
ICOM_METHOD3(HRESULT,UnmarshalInterface, IStream*,pStm, REFIID,riid, void**,ppv) \
|
|
ICOM_METHOD1(HRESULT,ReleaseMarshalData, IStream*,pStm) \
|
|
ICOM_METHOD1(HRESULT,DisconnectObject, DWORD,dwReserved)
|
|
#define IMarshal_IMETHODS \
|
|
IUnknown_IMETHODS \
|
|
IMarshal_METHODS
|
|
ICOM_DEFINE(IMarshal,IUnknown)
|
|
#undef ICOM_INTERFACE
|
|
|
|
/*** IUnknown methods ***/
|
|
#define IMarshal_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
|
|
#define IMarshal_AddRef(p) ICOM_CALL (AddRef,p)
|
|
#define IMarshal_Release(p) ICOM_CALL (Release,p)
|
|
/*** IMarshal methods ***/
|
|
#define IMarshal_GetUnmarshalClass(p,a,b,c,d,e,f) ICOM_CALL6(GetUnmarshalClass,p,a,b,c,d,e,f)
|
|
#define IMarshal_GetMarshalSizeMax(p,a,b,c,d,e,f) ICOM_CALL6(GetMarshalSizeMax,p,a,b,c,d,e,f)
|
|
#define IMarshal_MarshalInterface(p,a,b,c,d,e,f) ICOM_CALL6(MarshalInterface,p,a,b,c,d,e,f)
|
|
#define IMarshal_UnmarshalInterface(p,a,b,c) ICOM_CALL3(UnmarshalInterface,p,a,b,c)
|
|
#define IMarshal_ReleaseMarshalData(p,a) ICOM_CALL1(ReleaseMarshalData,p,a)
|
|
#define IMarshal_DisconnectObject(p,a) ICOM_CALL1(DisconnectObject,p,a)
|
|
|
|
|
|
/*****************************************************************************
|
|
* IStdMarshalInfo interface
|
|
*/
|
|
#define ICOM_INTERFACE IStdMarshalInfo
|
|
#define IStdMarshalInfo_METHODS \
|
|
ICOM_METHOD3(HRESULT,GetClassForHandler, DWORD,dwDestContext, void*,pvDestContext, CLSID*,pClsid)
|
|
#define IStdMarshalInfo_IMETHODS \
|
|
IUnknown_IMETHODS \
|
|
IStdMarshalInfo_METHODS
|
|
ICOM_DEFINE(IStdMarshalInfo,IUnknown)
|
|
#undef ICOM_INTERFACE
|
|
|
|
/*** IUnknown methods ***/
|
|
#define IStdMarshalInfo_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
|
|
#define IStdMarshalInfo_AddRef(p) ICOM_CALL (AddRef,p)
|
|
#define IStdMarshalInfo_Release(p) ICOM_CALL (Release,p)
|
|
/*** IStdMarshalInfo methods ***/
|
|
#define IStdMarshalInfo_GetClassForHandler(p,a,b,c) ICOM_CALL3(GetClassForHandler,p,a,b,c)
|
|
|
|
|
|
/*****************************************************************************
|
|
* Additional marshalling API
|
|
*/
|
|
|
|
/* FIXME: not implemented */
|
|
HRESULT WINAPI CoCreateFreeThreadedMarshaler(LPUNKNOWN punkOuter, LPUNKNOWN* ppunkMarshal);
|
|
|
|
/* FIXME: not implemented */
|
|
HRESULT WINAPI CoGetInterfaceAndReleaseStream(LPSTREAM pStm, REFIID iid, LPVOID* ppv);
|
|
|
|
/* FIXME: not implemented */
|
|
HRESULT WINAPI CoGetMarshalSizeMax(ULONG* pulSize, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags);
|
|
|
|
/* FIXME: not implemented */
|
|
HRESULT WINAPI CoGetStandardMarshal(REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags, LPMARSHAL* ppMarshal);
|
|
|
|
/* FIXME: not implemented */
|
|
HRESULT WINAPI CoMarshalHresult(LPSTREAM pstm, HRESULT hresult);
|
|
|
|
/* FIXME: not implemented */
|
|
HRESULT WINAPI CoMarshalInterface(LPSTREAM pStm, REFIID riid, LPUNKNOWN pUnk, DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags);
|
|
|
|
/* FIXME: not implemented */
|
|
HRESULT WINAPI CoMarshalInterThreadInterfaceInStream(REFIID riid, LPUNKNOWN pUnk, LPSTREAM* ppStm);
|
|
|
|
/* FIXME: not implemented */
|
|
HRESULT WINAPI CoReleaseMarshalData(LPSTREAM pStm);
|
|
|
|
/* FIXME: not implemented */
|
|
HRESULT WINAPI CoUnmarshalHresult(LPSTREAM pstm, HRESULT* phresult);
|
|
|
|
/* FIXME: not implemented */
|
|
HRESULT WINAPI CoUnmarshalInterface(LPSTREAM pStm, REFIID riid, LPVOID* ppv);
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif /* defined(__cplusplus) */
|
|
|
|
#endif /* __WINE_WINE_OBJ_MARSHAL_H */
|