- New implementation of SendMessage, ReceiveMessage, ReplyMessage functions
[wine] / ole / oleobj.c
1 /*
2  *      OLE2 COM objects
3  *
4  *      Copyright 1998 Eric Kohl
5  */
6
7
8 #include "ole.h"
9 #include "ole2.h"
10 #include "winerror.h"
11 #include "windows.h"
12 #include "wine/obj_base.h"
13 #include "wine/obj_storage.h"
14 #include "wine/obj_moniker.h"
15 #include "wine/obj_dataobject.h"
16 #include "oleobj.h"
17 #include "debug.h"
18
19
20 /**************************************************************************
21  *  IOleAdviseHolder Implementation
22  */
23 static HRESULT WINAPI IOleAdviseHolder_QueryInterface(LPOLEADVISEHOLDER,REFIID,LPVOID*);
24 static ULONG WINAPI   IOleAdviseHolder_AddRef(LPOLEADVISEHOLDER);
25 static ULONG WINAPI   IOleAdviseHolder_Release(LPOLEADVISEHOLDER);
26 static HRESULT WINAPI IOleAdviseHolder_Advise(LPOLEADVISEHOLDER, IAdviseSink*, DWORD*);
27 static HRESULT WINAPI IOleAdviseHolder_Unadvise (LPOLEADVISEHOLDER, DWORD);
28 static HRESULT WINAPI IOleAdviseHolder_EnumAdvise (LPOLEADVISEHOLDER, IEnumSTATDATA **);
29 static HRESULT WINAPI IOleAdviseHolder_SendOnRename (LPOLEADVISEHOLDER, IMoniker *);
30 static HRESULT WINAPI IOleAdviseHolder_SendOnSave (LPOLEADVISEHOLDER this);
31 static HRESULT WINAPI IOleAdviseHolder_SendOnClose (LPOLEADVISEHOLDER this);
32
33
34 /**************************************************************************
35  *  IOleAdviseHolder_VTable
36  */
37 static IOleAdviseHolder_VTable oahvt =
38 {
39     IOleAdviseHolder_QueryInterface,
40     IOleAdviseHolder_AddRef,
41     IOleAdviseHolder_Release,
42     IOleAdviseHolder_Advise,
43     IOleAdviseHolder_Unadvise,
44     IOleAdviseHolder_EnumAdvise,
45     IOleAdviseHolder_SendOnRename,
46     IOleAdviseHolder_SendOnSave,
47     IOleAdviseHolder_SendOnClose
48 };
49
50 /**************************************************************************
51  *  IOleAdviseHolder_Constructor
52  */
53
54 LPOLEADVISEHOLDER IOleAdviseHolder_Constructor()
55 {
56     LPOLEADVISEHOLDER lpoah;
57
58     lpoah= (LPOLEADVISEHOLDER)HeapAlloc(GetProcessHeap(),0,sizeof(IOleAdviseHolder));
59     lpoah->ref = 1;
60     lpoah->lpvtbl = &oahvt;
61     FIXME (ole, "(%p)->()\n", lpoah);
62
63     return lpoah;
64 }
65
66 /**************************************************************************
67  *  IOleAdviseHolder_QueryInterface
68  */
69 static HRESULT WINAPI
70 IOleAdviseHolder_QueryInterface (LPOLEADVISEHOLDER this, REFIID riid, LPVOID *ppvObj)
71 {
72     char xriid[50];
73     WINE_StringFromCLSID((LPCLSID)riid,xriid);
74     FIXME (ole, "(%p)->(\n\tIID:\t%s)\n", this, xriid);
75
76     *ppvObj = NULL;
77
78     if(IsEqualIID(riid, &IID_IUnknown)) {
79         /* IUnknown */
80         *ppvObj = this; 
81     }
82     else if(IsEqualIID(riid, &IID_IOleAdviseHolder)) {
83         /* IOleAdviseHolder */
84         *ppvObj = (IOleAdviseHolder*) this;
85     }
86
87     if(*ppvObj) {
88         (*(LPOLEADVISEHOLDER*)ppvObj)->lpvtbl->fnAddRef(this);          
89         FIXME (ole, "-- Interface: (%p)->(%p)\n", ppvObj, *ppvObj);
90         return S_OK;
91     }
92
93     FIXME (ole, "-- Interface: E_NOINTERFACE\n");
94     return E_NOINTERFACE;
95 }
96
97 /******************************************************************************
98  * IOleAdviseHolder_AddRef
99  */
100 static ULONG WINAPI
101 IOleAdviseHolder_AddRef (LPOLEADVISEHOLDER this)
102 {
103     FIXME (ole, "(%p)->(count=%lu)\n", this, this->ref);
104     return ++(this->ref);
105 }
106
107 /******************************************************************************
108  * IOleAdviseHolder_Release
109  */
110 static ULONG WINAPI
111 IOleAdviseHolder_Release (LPOLEADVISEHOLDER this)
112 {
113     FIXME (ole, "(%p)->(count=%lu)\n", this, this->ref);
114     if (!--(this->ref)) {
115         FIXME (ole, "-- destroying IOleAdviseHolder(%p)\n", this);
116         HeapFree(GetProcessHeap(),0,this);
117         return 0;
118     }
119     return this->ref;
120 }
121
122 /******************************************************************************
123  * IOleAdviseHolder_Advise
124  */
125 static HRESULT WINAPI
126 IOleAdviseHolder_Advise (LPOLEADVISEHOLDER this,
127                          IAdviseSink *pAdvise, DWORD *pdwConnection)
128 {
129     FIXME (ole, "(%p)->(%p %p)\n", this, pAdvise, pdwConnection);
130
131     *pdwConnection = 0;
132
133    return S_OK;
134 }
135
136 /******************************************************************************
137  * IOleAdviseHolder_Unadvise
138  */
139 static HRESULT WINAPI
140 IOleAdviseHolder_Unadvise (LPOLEADVISEHOLDER this, DWORD dwConnection)
141 {
142     FIXME (ole, "(%p)->(%lu)\n", this, dwConnection);
143
144     return S_OK;
145 }
146
147 /******************************************************************************
148  * IOleAdviseHolder_EnumAdvise
149  */
150 static HRESULT WINAPI
151 IOleAdviseHolder_EnumAdvise (LPOLEADVISEHOLDER this, IEnumSTATDATA **ppenumAdvise)
152 {
153     FIXME (ole, "(%p)->(%p)\n", this, ppenumAdvise);
154
155     *ppenumAdvise = NULL;
156
157     return S_OK;
158 }
159
160 /******************************************************************************
161  * IOleAdviseHolder_SendOnRename
162  */
163 static HRESULT WINAPI
164 IOleAdviseHolder_SendOnRename (LPOLEADVISEHOLDER this, IMoniker *pmk)
165 {
166     FIXME (ole, "(%p)->(%p)\n", this, pmk);
167
168
169     return S_OK;
170 }
171
172 /******************************************************************************
173  * IOleAdviseHolder_SendOnSave
174  */
175 static HRESULT WINAPI
176 IOleAdviseHolder_SendOnSave (LPOLEADVISEHOLDER this)
177 {
178     FIXME (ole, "(%p)\n", this);
179
180
181     return S_OK;
182 }
183
184 /******************************************************************************
185  * IOleAdviseHolder_SendOnClose
186  */
187 static HRESULT WINAPI
188 IOleAdviseHolder_SendOnClose (LPOLEADVISEHOLDER this)
189 {
190     FIXME (ole, "(%p)\n", this);
191
192
193     return S_OK;
194 }
195
196 /***********************************************************************
197  * API functions
198  */
199
200 /***********************************************************************
201  * CreateOleAdviseHolder [OLE32.59]
202  */
203 HRESULT WINAPI CreateOleAdviseHolder32 (LPOLEADVISEHOLDER *ppOAHolder)
204 {
205     FIXME(ole,"(%p): stub!\n", ppOAHolder);
206
207     *ppOAHolder = IOleAdviseHolder_Constructor ();
208     if (*ppOAHolder)
209         return S_OK;
210
211     *ppOAHolder = 0;
212     return E_OUTOFMEMORY;
213 }
214