Use iphlpapi to implement SIO_GET_INTERFACE_LIST in WSAIoctl, and
[wine.git] / dlls / ole32 / ole2stubs.c
blob0bd668508ffa5cf7f492650e79e72fbcb87da288
1 /*
2 * Temporary place for ole2 stubs.
4 * Copyright (C) 1999 Corel Corporation
5 * Move these functions to dlls/ole32/ole2impl.c when you implement them.
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #define NONAMELESSUNION
23 #define NONAMELESSSTRUCT
24 #include "windef.h"
25 #include "winbase.h"
26 #include "winuser.h"
27 #include "ole2.h"
28 #include "objidl.h"
29 #include "wine/debug.h"
31 WINE_DEFAULT_DEBUG_CHANNEL(ole);
33 /******************************************************************************
34 * OleCreateLinkToFile [OLE32.96]
36 HRESULT WINAPI OleCreateLinkToFile(LPCOLESTR lpszFileName, REFIID riid,
37 DWORD renderopt, LPFORMATETC lpFormatEtc,
38 LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj)
40 FIXME("(%p,%p,%li,%p,%p,%p,%p), stub!\n",lpszFileName, riid, renderopt, lpFormatEtc, pClientSite, pStg, ppvObj);
41 return E_NOTIMPL;
45 /******************************************************************************
46 * OleDuplicateData [OLE32.102]
48 HRESULT WINAPI OleDuplicateData(HANDLE hSrc, CLIPFORMAT cfFormat,
49 UINT uiFlags)
51 FIXME("(%p,%x,%x), stub!\n", hSrc, cfFormat, uiFlags);
52 return E_NOTIMPL;
56 /***********************************************************************
57 * OleTranslateAccelerator [OLE32.130]
59 HRESULT WINAPI OleTranslateAccelerator (LPOLEINPLACEFRAME lpFrame,
60 LPOLEINPLACEFRAMEINFO lpFrameInfo, LPMSG lpmsg)
62 FIXME("(%p,%p,%p),stub!\n", lpFrame, lpFrameInfo, lpmsg);
63 return S_OK;
66 /******************************************************************************
67 * SetConvertStg [OLE32.142]
69 HRESULT WINAPI SetConvertStg(LPSTORAGE pStg, BOOL fConvert)
71 FIXME("(%p,%x), stub!\n", pStg, fConvert);
72 return E_NOTIMPL;
75 /******************************************************************************
76 * OleCreate [OLE32.89]
79 HRESULT WINAPI OleCreate(
80 REFCLSID rclsid,
81 REFIID riid,
82 DWORD renderopt,
83 LPFORMATETC pFormatEtc,
84 LPOLECLIENTSITE pClientSite,
85 LPSTORAGE pStg,
86 LPVOID* ppvObj)
88 HRESULT hres, hres1;
89 IUnknown * pUnk = NULL;
91 FIXME("\n\t%s\n\t%s stub!\n", debugstr_guid(rclsid), debugstr_guid(riid));
93 if (SUCCEEDED((hres = CoCreateInstance(rclsid, 0, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER|CLSCTX_LOCAL_SERVER , riid, (LPVOID*)&pUnk))))
95 if (pClientSite)
97 IOleObject * pOE;
98 IPersistStorage * pPS;
99 if (SUCCEEDED((hres = IUnknown_QueryInterface( pUnk, &IID_IOleObject, (LPVOID*)&pOE))))
101 TRACE("trying to set clientsite %p\n", pClientSite);
102 hres1 = IOleObject_SetClientSite(pOE, pClientSite);
103 TRACE("-- result 0x%08lx\n", hres1);
104 IOleObject_Release(pOE);
106 if (SUCCEEDED((hres = IUnknown_QueryInterface( pUnk, &IID_IPersistStorage, (LPVOID*)&pPS))))
108 TRACE("trying to set stg %p\n", pStg);
109 hres1 = IPersistStorage_InitNew(pPS, pStg);
110 TRACE("-- result 0x%08lx\n", hres1);
111 IPersistStorage_Release(pPS);
116 *ppvObj = pUnk;
118 TRACE("-- %p \n", pUnk);
119 return hres;
122 /******************************************************************************
123 * OleCreateLink [OLE32.94]
125 HRESULT WINAPI OleCreateLink(LPMONIKER pmkLinkSrc, REFIID riid, DWORD renderopt, LPFORMATETC lpFormatEtc,
126 LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj)
128 FIXME("(not shown), stub!\n");
129 return E_NOTIMPL;
132 /******************************************************************************
133 * OleCreateFromFile [OLE32.93]
135 HRESULT WINAPI OleCreateFromFile(REFCLSID rclsid, LPCOLESTR lpszFileName, REFIID riid,
136 DWORD renderopt, LPFORMATETC lpFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID* ppvObj)
138 FIXME("(not shown), stub!\n");
139 return E_NOTIMPL;
143 /******************************************************************************
144 * OleGetIconOfClass [OLE32.106]
146 HGLOBAL WINAPI OleGetIconOfClass(REFCLSID rclsid, LPOLESTR lpszLabel, BOOL fUseTypeAsLabel)
148 FIXME("(%p,%p,%x), stub!\n", rclsid, lpszLabel, fUseTypeAsLabel);
149 return NULL;
153 /******************************************************************************
154 * OleCreateStaticFromData [OLE32.98]
156 HRESULT WINAPI OleCreateStaticFromData(LPDATAOBJECT pSrcDataObj, REFIID iid,
157 DWORD renderopt, LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite,
158 LPSTORAGE pStg, LPVOID* ppvObj)
160 FIXME("(not shown), stub!\n");
161 return E_NOTIMPL;
164 /******************************************************************************
165 * OleCreateLinkFromData [OLE32.95]
168 HRESULT WINAPI OleCreateLinkFromData(LPDATAOBJECT pSrcDataObj, REFIID riid,
169 DWORD renderopt, LPFORMATETC pFormatEtc,
170 LPOLECLIENTSITE pClientSite, LPSTORAGE pStg,
171 LPVOID* ppvObj)
173 FIXME("(not shown), stub!\n");
174 return E_NOTIMPL;
177 /******************************************************************************
178 * OleIsRunning [OLE32.111]
180 BOOL WINAPI OleIsRunning(LPOLEOBJECT pObject)
182 FIXME("(%p), stub!\n", pObject);
183 return TRUE;
186 /***********************************************************************
187 * OleRegEnumVerbs [OLE32.120]
189 HRESULT WINAPI OleRegEnumVerbs (REFCLSID clsid, LPENUMOLEVERB* ppenum)
191 FIXME("(%p,%p), stub!\n", clsid, ppenum);
192 return OLEOBJ_E_NOVERBS;
195 /***********************************************************************
196 * OleRegEnumFormatEtc [OLE32.119]
198 HRESULT WINAPI OleRegEnumFormatEtc (
199 REFCLSID clsid,
200 DWORD dwDirection,
201 LPENUMFORMATETC* ppenumFormatetc)
203 FIXME("(%p, %ld, %p), stub!\n", clsid, dwDirection, ppenumFormatetc);
205 return E_NOTIMPL;
208 /***********************************************************************
209 * OLE_FreeClipDataArray [internal]
211 * NOTES:
212 * frees the data associated with an array of CLIPDATAs
214 static void OLE_FreeClipDataArray(ULONG count, CLIPDATA * pClipDataArray)
216 ULONG i;
217 for (i = 0; i < count; i++)
219 if (pClipDataArray[i].pClipData)
221 CoTaskMemFree(pClipDataArray[i].pClipData);
226 HRESULT WINAPI FreePropVariantArray(ULONG,PROPVARIANT*);
228 /***********************************************************************
229 * PropVariantClear [OLE32.166]
231 HRESULT WINAPI PropVariantClear(PROPVARIANT * pvar) /* [in/out] */
233 TRACE("(%p)\n", pvar);
235 if (!pvar)
236 return S_OK;
238 switch(pvar->vt)
240 case VT_STREAM:
241 case VT_STREAMED_OBJECT:
242 case VT_STORAGE:
243 case VT_STORED_OBJECT:
244 IUnknown_Release((LPUNKNOWN)pvar->u.pStream);
245 break;
246 case VT_CLSID:
247 case VT_LPSTR:
248 case VT_LPWSTR:
249 CoTaskMemFree(pvar->u.puuid); /* pick an arbitary typed pointer - we don't care about the type as we are just freeing it */
250 break;
251 case VT_BLOB:
252 case VT_BLOB_OBJECT:
253 CoTaskMemFree(pvar->u.blob.pBlobData);
254 break;
255 case VT_BSTR:
256 FIXME("Need to load OLEAUT32 for SysFreeString\n");
257 /* SysFreeString(pvar->u.bstrVal); */
258 break;
259 case VT_CF:
260 if (pvar->u.pclipdata)
262 OLE_FreeClipDataArray(1, pvar->u.pclipdata);
263 CoTaskMemFree(pvar->u.pclipdata);
265 break;
266 default:
267 if (pvar->vt & VT_ARRAY)
269 FIXME("Need to call SafeArrayDestroy\n");
270 /* SafeArrayDestroy(pvar->u.caub); */
272 switch (pvar->vt & VT_VECTOR)
274 case VT_VARIANT:
275 FreePropVariantArray(pvar->u.capropvar.cElems, pvar->u.capropvar.pElems);
276 break;
277 case VT_CF:
278 OLE_FreeClipDataArray(pvar->u.caclipdata.cElems, pvar->u.caclipdata.pElems);
279 break;
280 case VT_BSTR:
281 case VT_LPSTR:
282 case VT_LPWSTR:
283 FIXME("Freeing of vector sub-type not supported yet\n");
285 if (pvar->vt & VT_VECTOR)
287 CoTaskMemFree(pvar->u.capropvar.pElems); /* pick an arbitary VT_VECTOR structure - they all have the same memory layout */
291 ZeroMemory(pvar, sizeof(*pvar));
293 return S_OK;
296 /***********************************************************************
297 * PropVariantCopy [OLE32.246]
299 HRESULT WINAPI PropVariantCopy(PROPVARIANT *pvarDest, /* [out] FIXME: PROPVARIANT * */
300 const PROPVARIANT *pvarSrc) /* [in] FIXME: const PROPVARIANT * */
302 ULONG len;
303 TRACE("(%p, %p): stub:\n", pvarDest, pvarSrc);
305 /* this will deal with most cases */
306 CopyMemory(pvarDest, pvarSrc, sizeof(*pvarDest));
308 switch(pvarSrc->vt)
310 case VT_STREAM:
311 case VT_STREAMED_OBJECT:
312 case VT_STORAGE:
313 case VT_STORED_OBJECT:
314 IUnknown_AddRef((LPUNKNOWN)pvarDest->u.pStream);
315 break;
316 case VT_CLSID:
317 pvarDest->u.puuid = CoTaskMemAlloc(sizeof(CLSID));
318 CopyMemory(pvarDest->u.puuid, pvarSrc->u.puuid, sizeof(CLSID));
319 break;
320 case VT_LPSTR:
321 len = strlen(pvarSrc->u.pszVal);
322 pvarDest->u.pszVal = CoTaskMemAlloc(len);
323 CopyMemory(pvarDest->u.pszVal, pvarSrc->u.pszVal, len);
324 break;
325 case VT_LPWSTR:
326 len = lstrlenW(pvarSrc->u.pwszVal);
327 pvarDest->u.pwszVal = CoTaskMemAlloc(len);
328 CopyMemory(pvarDest->u.pwszVal, pvarSrc->u.pwszVal, len);
329 break;
330 case VT_BLOB:
331 case VT_BLOB_OBJECT:
332 if (pvarSrc->u.blob.pBlobData)
334 len = pvarSrc->u.blob.cbSize;
335 pvarDest->u.blob.pBlobData = CoTaskMemAlloc(len);
336 CopyMemory(pvarDest->u.blob.pBlobData, pvarSrc->u.blob.pBlobData, len);
338 break;
339 case VT_BSTR:
340 FIXME("Need to copy BSTR\n");
341 break;
342 case VT_CF:
343 if (pvarSrc->u.pclipdata)
345 len = pvarSrc->u.pclipdata->cbSize - sizeof(pvarSrc->u.pclipdata->ulClipFmt);
346 CoTaskMemAlloc(len);
347 CopyMemory(pvarDest->u.pclipdata->pClipData, pvarSrc->u.pclipdata->pClipData, len);
349 break;
350 default:
351 if (pvarSrc->vt & VT_ARRAY)
353 FIXME("Need to call SafeArrayCopy\n");
354 /* SafeArrayCopy(...); */
356 if (pvarSrc->vt & VT_VECTOR)
358 int elemSize;
359 switch(pvarSrc->vt & VT_VECTOR)
361 case VT_I1:
362 elemSize = sizeof(pvarSrc->u.cVal);
363 break;
364 case VT_UI1:
365 elemSize = sizeof(pvarSrc->u.bVal);
366 break;
367 case VT_I2:
368 elemSize = sizeof(pvarSrc->u.iVal);
369 break;
370 case VT_UI2:
371 elemSize = sizeof(pvarSrc->u.uiVal);
372 break;
373 case VT_BOOL:
374 elemSize = sizeof(pvarSrc->u.boolVal);
375 break;
376 case VT_I4:
377 elemSize = sizeof(pvarSrc->u.lVal);
378 break;
379 case VT_UI4:
380 elemSize = sizeof(pvarSrc->u.ulVal);
381 break;
382 case VT_R4:
383 elemSize = sizeof(pvarSrc->u.fltVal);
384 break;
385 case VT_R8:
386 elemSize = sizeof(pvarSrc->u.dblVal);
387 break;
388 case VT_ERROR:
389 elemSize = sizeof(pvarSrc->u.scode);
390 break;
391 case VT_I8:
392 elemSize = sizeof(pvarSrc->u.hVal);
393 break;
394 case VT_UI8:
395 elemSize = sizeof(pvarSrc->u.uhVal);
396 break;
397 case VT_CY:
398 elemSize = sizeof(pvarSrc->u.cyVal);
399 break;
400 case VT_DATE:
401 elemSize = sizeof(pvarSrc->u.date);
402 break;
403 case VT_FILETIME:
404 elemSize = sizeof(pvarSrc->u.filetime);
405 break;
406 case VT_CLSID:
407 elemSize = sizeof(*pvarSrc->u.puuid);
408 break;
409 case VT_CF:
410 elemSize = sizeof(*pvarSrc->u.pclipdata);
411 break;
412 case VT_BSTR:
413 case VT_LPSTR:
414 case VT_LPWSTR:
415 case VT_VARIANT:
416 default:
417 FIXME("Invalid element type: %ul\n", pvarSrc->vt & VT_VECTOR);
418 return E_INVALIDARG;
420 len = pvarSrc->u.capropvar.cElems;
421 pvarDest->u.capropvar.pElems = CoTaskMemAlloc(len * elemSize);
422 if (pvarSrc->vt == (VT_VECTOR | VT_VARIANT))
424 ULONG i;
425 for (i = 0; i < len; i++)
426 PropVariantCopy(&pvarDest->u.capropvar.pElems[i], &pvarSrc->u.capropvar.pElems[i]);
428 else if (pvarSrc->vt == (VT_VECTOR | VT_CF))
430 FIXME("Copy clipformats\n");
432 else if (pvarSrc->vt == (VT_VECTOR | VT_BSTR))
434 FIXME("Copy BSTRs\n");
436 else if (pvarSrc->vt == (VT_VECTOR | VT_LPSTR))
438 FIXME("Copy LPSTRs\n");
440 else if (pvarSrc->vt == (VT_VECTOR | VT_LPSTR))
442 FIXME("Copy LPWSTRs\n");
444 else
445 CopyMemory(pvarDest->u.capropvar.pElems, pvarSrc->u.capropvar.pElems, len * elemSize);
449 return S_OK;
452 /***********************************************************************
453 * FreePropVariantArray [OLE32.195]
455 HRESULT WINAPI FreePropVariantArray(ULONG cVariants, /* [in] */
456 PROPVARIANT *rgvars) /* [in/out] */
458 ULONG i;
460 TRACE("(%lu, %p)\n", cVariants, rgvars);
462 for(i = 0; i < cVariants; i++)
463 PropVariantClear(&rgvars[i]);
465 return S_OK;
468 /***********************************************************************
469 * CoIsOle1Class [OLE32.29]
471 BOOL WINAPI CoIsOle1Class(REFCLSID clsid)
473 FIXME("%s\n", debugstr_guid(clsid));
474 return FALSE;
477 /***********************************************************************
478 * DllGetClassObject [OLE2.4]
480 HRESULT WINAPI DllGetClassObject16(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
482 FIXME("(%s, %s, %p): stub\n", debugstr_guid(rclsid), debugstr_guid(iid), ppv);
483 return E_NOTIMPL;
486 /***********************************************************************
487 * OleSetClipboard [OLE2.49]
489 HRESULT WINAPI OleSetClipboard16(IDataObject* pDataObj)
491 FIXME("(%p): stub\n", pDataObj);
492 return S_OK;
495 /***********************************************************************
496 * OleGetClipboard [OLE2.50]
498 HRESULT WINAPI OleGetClipboard16(IDataObject** ppDataObj)
500 FIXME("(%p): stub\n", ppDataObj);
501 return E_NOTIMPL;