Release 980517
[wine] / include / interfaces.h
1 #ifndef _WINE_INTERFACES_H
2 #define _WINE_INTERFACES_H
3
4 #include "ole.h"
5 #include "ole2.h"
6 #include "compobj.h"
7
8 #define STDMETHOD(xfn) HRESULT (CALLBACK *fn##xfn)
9 #define STDMETHOD_(ret,xfn) ret (CALLBACK *fn##xfn)
10 #define PURE
11 #define FAR
12 #define THIS_ THIS,
13
14
15 DEFINE_OLEGUID(IID_IUnknown,0,0,0);
16 DEFINE_OLEGUID(IID_IClassFactory,1,0,0);
17 DEFINE_OLEGUID(IID_IMalloc,2,0,0);
18 DEFINE_OLEGUID(IID_IMarshal,3,0,0);
19 DEFINE_OLEGUID(IID_IStorage,0xb,0,0);
20 DEFINE_OLEGUID(IID_IStream,0xc,0,0);
21 DEFINE_OLEGUID(IID_IBindCtx,0xe,0,0);
22 DEFINE_OLEGUID(IID_IMoniker,0xf,0,0);
23 DEFINE_OLEGUID(IID_IRunningObject,0x10,0,0);
24 DEFINE_OLEGUID(IID_IRootStorage,0x12,0,0);
25 DEFINE_OLEGUID(IID_IMessageFilter,0x16,0,0);
26 DEFINE_OLEGUID(IID_IStdMarshalInfo,0x18,0,0);
27
28 #define THIS LPUNKNOWN this
29 typedef struct IUnknown *LPUNKNOWN,IUnknown;
30 typedef struct {
31         STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID FAR* ppvObj) PURE;
32         STDMETHOD_(ULONG,AddRef) (THIS) PURE;
33         STDMETHOD_(ULONG,Release) (THIS) PURE;
34 } *LPUNKNOWN_VTABLE,IUnknown_VTable;
35
36 struct IUnknown {
37         LPUNKNOWN_VTABLE        lpvtbl;
38         DWORD                   ref;
39 };
40 #undef THIS
41
42 #define THIS LPCLASSFACTORY this
43 typedef struct IClassFactory *LPCLASSFACTORY,IClassFactory;
44 typedef struct {
45         STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID FAR* ppvObj) PURE;
46         STDMETHOD_(ULONG,AddRef) (THIS) PURE;
47         STDMETHOD_(ULONG,Release) (THIS) PURE;
48         STDMETHOD(CreateInstance) (THIS_ LPUNKNOWN pUnkOuter, REFIID riid, LPVOID FAR* ppvObject) PURE;
49 } *LPCLASSFACTORY_VTABLE,IClassFactory_VTable;
50
51 struct IClassFactory {
52         LPCLASSFACTORY_VTABLE   lpvtbl;
53         DWORD                   ref;
54 };
55 #undef THIS
56
57 #define THIS LPMALLOC32 this
58 typedef struct IMalloc32 *LPMALLOC32,IMalloc32;
59 typedef struct {
60         STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID FAR* ppvObj) PURE;
61         STDMETHOD_(ULONG,AddRef) (THIS) PURE;
62         STDMETHOD_(ULONG,Release) (THIS) PURE;
63
64         STDMETHOD_(LPVOID,Alloc) ( THIS_ DWORD cb);
65         STDMETHOD_(LPVOID,Realloc) ( THIS_ LPVOID pv,DWORD cb);
66         STDMETHOD_(VOID,Free) ( THIS_ LPVOID pv);
67         STDMETHOD_(DWORD,GetSize) ( THIS_ LPVOID pv);
68         STDMETHOD_(INT32,DidAlloc) ( THIS_ LPVOID pv);
69         STDMETHOD_(LPVOID,HeapMinimize) ( THIS );
70 } *LPMALLOC32_VTABLE,IMalloc32_VTable;
71
72 struct IMalloc32 {
73         LPMALLOC32_VTABLE       lpvtbl;
74         DWORD                   ref;
75 };
76 #undef THIS
77
78 #define THIS LPMALLOC16 this
79 typedef struct IMalloc16 *LPMALLOC16,IMalloc16;
80 typedef struct {
81         STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID FAR* ppvObj) PURE;
82         STDMETHOD_(ULONG,AddRef) (THIS) PURE;
83         STDMETHOD_(ULONG,Release) (THIS) PURE;
84
85         STDMETHOD_(LPVOID,Alloc) ( THIS_ DWORD cb);
86         STDMETHOD_(LPVOID,Realloc) ( THIS_ LPVOID pv,DWORD cb);
87         STDMETHOD_(VOID,Free) ( THIS_ LPVOID pv);
88         STDMETHOD_(DWORD,GetSize) ( THIS_ LPVOID pv);
89         STDMETHOD_(INT16,DidAlloc) ( THIS_ LPVOID pv);
90         STDMETHOD_(LPVOID,HeapMinimize) ( THIS );
91 } *LPMALLOC16_VTABLE,IMalloc16_VTable;
92
93 struct IMalloc16 {
94         LPMALLOC16_VTABLE       lpvtbl;
95         DWORD                   ref;
96         /* Gmm, I think one is not enough, we should probably manage a list of
97          * heaps
98          */
99         HGLOBAL16               heap;
100 };
101 #undef THIS
102
103 /* private prototypes for the constructors */
104 #ifdef __WINE__
105 LPUNKNOWN       IUnknown_Constructor();
106 LPMALLOC16      IMalloc16_Constructor();
107 LPMALLOC32      IMalloc32_Constructor();
108 #endif
109
110 #undef STDMETHOD
111 #undef STDMETHOD_
112 #undef PURE
113 #undef FAR
114 #undef THIS_
115 #endif /*_WINE_INTERFACES_H*/