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
31 #include "wine/debug.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(ole
);
35 /******************************************************************************
36 * OleCreateLinkToFile [OLE32.96]
38 HRESULT WINAPI
OleCreateLinkToFile(LPCOLESTR lpszFileName
, REFIID riid
,
39 DWORD renderopt
, LPFORMATETC lpFormatEtc
,
40 LPOLECLIENTSITE pClientSite
, LPSTORAGE pStg
, LPVOID
* ppvObj
)
42 FIXME("(%p,%p,%li,%p,%p,%p,%p), stub!\n",lpszFileName
, riid
, renderopt
, lpFormatEtc
, pClientSite
, pStg
, ppvObj
);
47 /******************************************************************************
48 * OleDuplicateData [OLE32.102]
50 HRESULT WINAPI
OleDuplicateData(HANDLE hSrc
, CLIPFORMAT cfFormat
,
53 FIXME("(%p,%x,%x), stub!\n", hSrc
, cfFormat
, uiFlags
);
58 /***********************************************************************
59 * OleTranslateAccelerator [OLE32.130]
61 HRESULT WINAPI
OleTranslateAccelerator (LPOLEINPLACEFRAME lpFrame
,
62 LPOLEINPLACEFRAMEINFO lpFrameInfo
, LPMSG lpmsg
)
64 FIXME("(%p,%p,%p),stub!\n", lpFrame
, lpFrameInfo
, lpmsg
);
68 /******************************************************************************
69 * SetConvertStg [OLE32.142]
71 HRESULT WINAPI
SetConvertStg(LPSTORAGE pStg
, BOOL fConvert
)
73 FIXME("(%p,%x), stub!\n", pStg
, fConvert
);
77 /******************************************************************************
78 * OleCreate [OLE32.89]
81 HRESULT WINAPI
OleCreate(
85 LPFORMATETC pFormatEtc
,
86 LPOLECLIENTSITE pClientSite
,
91 IUnknown
* pUnk
= NULL
;
93 FIXME("\n\t%s\n\t%s stub!\n", debugstr_guid(rclsid
), debugstr_guid(riid
));
95 if (SUCCEEDED((hres
= CoCreateInstance(rclsid
, 0, CLSCTX_INPROC_SERVER
|CLSCTX_INPROC_HANDLER
|CLSCTX_LOCAL_SERVER
, riid
, (LPVOID
*)&pUnk
))))
100 IPersistStorage
* pPS
;
101 if (SUCCEEDED((hres
= IUnknown_QueryInterface( pUnk
, &IID_IOleObject
, (LPVOID
*)&pOE
))))
103 TRACE("trying to set clientsite %p\n", pClientSite
);
104 hres1
= IOleObject_SetClientSite(pOE
, pClientSite
);
105 TRACE("-- result 0x%08lx\n", hres1
);
106 IOleObject_Release(pOE
);
108 if (SUCCEEDED((hres
= IUnknown_QueryInterface( pUnk
, &IID_IPersistStorage
, (LPVOID
*)&pPS
))))
110 TRACE("trying to set stg %p\n", pStg
);
111 hres1
= IPersistStorage_InitNew(pPS
, pStg
);
112 TRACE("-- result 0x%08lx\n", hres1
);
113 IPersistStorage_Release(pPS
);
120 TRACE("-- %p \n", pUnk
);
124 /******************************************************************************
125 * OleCreateLink [OLE32.94]
127 HRESULT WINAPI
OleCreateLink(LPMONIKER pmkLinkSrc
, REFIID riid
, DWORD renderopt
, LPFORMATETC lpFormatEtc
,
128 LPOLECLIENTSITE pClientSite
, LPSTORAGE pStg
, LPVOID
* ppvObj
)
130 FIXME("(not shown), stub!\n");
134 /******************************************************************************
135 * OleCreateFromFile [OLE32.93]
137 HRESULT WINAPI
OleCreateFromFile(REFCLSID rclsid
, LPCOLESTR lpszFileName
, REFIID riid
,
138 DWORD renderopt
, LPFORMATETC lpFormatEtc
, LPOLECLIENTSITE pClientSite
, LPSTORAGE pStg
, LPVOID
* ppvObj
)
140 FIXME("(not shown), stub!\n");
145 /******************************************************************************
146 * OleGetIconOfClass [OLE32.106]
148 HGLOBAL WINAPI
OleGetIconOfClass(REFCLSID rclsid
, LPOLESTR lpszLabel
, BOOL fUseTypeAsLabel
)
150 FIXME("(%p,%p,%x), stub!\n", rclsid
, lpszLabel
, fUseTypeAsLabel
);
155 /******************************************************************************
156 * OleCreateStaticFromData [OLE32.98]
158 HRESULT WINAPI
OleCreateStaticFromData(LPDATAOBJECT pSrcDataObj
, REFIID iid
,
159 DWORD renderopt
, LPFORMATETC pFormatEtc
, LPOLECLIENTSITE pClientSite
,
160 LPSTORAGE pStg
, LPVOID
* ppvObj
)
162 FIXME("(not shown), stub!\n");
166 /******************************************************************************
167 * OleCreateLinkFromData [OLE32.95]
170 HRESULT WINAPI
OleCreateLinkFromData(LPDATAOBJECT pSrcDataObj
, REFIID riid
,
171 DWORD renderopt
, LPFORMATETC pFormatEtc
,
172 LPOLECLIENTSITE pClientSite
, LPSTORAGE pStg
,
175 FIXME("(not shown), stub!\n");
179 /******************************************************************************
180 * OleIsRunning [OLE32.111]
182 BOOL WINAPI
OleIsRunning(LPOLEOBJECT pObject
)
184 FIXME("(%p), stub!\n", pObject
);
188 /***********************************************************************
189 * OleRegEnumVerbs [OLE32.120]
191 HRESULT WINAPI
OleRegEnumVerbs (REFCLSID clsid
, LPENUMOLEVERB
* ppenum
)
193 FIXME("(%p,%p), stub!\n", clsid
, ppenum
);
194 return OLEOBJ_E_NOVERBS
;
197 /***********************************************************************
198 * OleRegEnumFormatEtc [OLE32.119]
200 HRESULT WINAPI
OleRegEnumFormatEtc (
203 LPENUMFORMATETC
* ppenumFormatetc
)
205 FIXME("(%p, %ld, %p), stub!\n", clsid
, dwDirection
, ppenumFormatetc
);
210 /***********************************************************************
211 * OLE_FreeClipDataArray [internal]
214 * frees the data associated with an array of CLIPDATAs
216 static void OLE_FreeClipDataArray(ULONG count
, CLIPDATA
* pClipDataArray
)
219 for (i
= 0; i
< count
; i
++)
221 if (pClipDataArray
[i
].pClipData
)
223 CoTaskMemFree(pClipDataArray
[i
].pClipData
);
228 HRESULT WINAPI
FreePropVariantArray(ULONG
,PROPVARIANT
*);
230 /***********************************************************************
231 * PropVariantClear [OLE32.166]
233 HRESULT WINAPI
PropVariantClear(PROPVARIANT
* pvar
) /* [in/out] */
235 TRACE("(%p)\n", pvar
);
243 case VT_STREAMED_OBJECT
:
245 case VT_STORED_OBJECT
:
246 IUnknown_Release((LPUNKNOWN
)pvar
->u
.pStream
);
251 CoTaskMemFree(pvar
->u
.puuid
); /* pick an arbitary typed pointer - we don't care about the type as we are just freeing it */
255 CoTaskMemFree(pvar
->u
.blob
.pBlobData
);
258 FIXME("Need to load OLEAUT32 for SysFreeString\n");
259 /* SysFreeString(pvar->u.bstrVal); */
262 if (pvar
->u
.pclipdata
)
264 OLE_FreeClipDataArray(1, pvar
->u
.pclipdata
);
265 CoTaskMemFree(pvar
->u
.pclipdata
);
269 if (pvar
->vt
& VT_ARRAY
)
271 FIXME("Need to call SafeArrayDestroy\n");
272 /* SafeArrayDestroy(pvar->u.caub); */
274 switch (pvar
->vt
& VT_VECTOR
)
277 FreePropVariantArray(pvar
->u
.capropvar
.cElems
, pvar
->u
.capropvar
.pElems
);
280 OLE_FreeClipDataArray(pvar
->u
.caclipdata
.cElems
, pvar
->u
.caclipdata
.pElems
);
285 FIXME("Freeing of vector sub-type not supported yet\n");
287 if (pvar
->vt
& VT_VECTOR
)
289 CoTaskMemFree(pvar
->u
.capropvar
.pElems
); /* pick an arbitary VT_VECTOR structure - they all have the same memory layout */
293 ZeroMemory(pvar
, sizeof(*pvar
));
298 /***********************************************************************
299 * PropVariantCopy [OLE32.246]
301 HRESULT WINAPI
PropVariantCopy(PROPVARIANT
*pvarDest
, /* [out] FIXME: PROPVARIANT * */
302 const PROPVARIANT
*pvarSrc
) /* [in] FIXME: const PROPVARIANT * */
305 TRACE("(%p, %p): stub:\n", pvarDest
, pvarSrc
);
307 /* this will deal with most cases */
308 CopyMemory(pvarDest
, pvarSrc
, sizeof(*pvarDest
));
313 case VT_STREAMED_OBJECT
:
315 case VT_STORED_OBJECT
:
316 IUnknown_AddRef((LPUNKNOWN
)pvarDest
->u
.pStream
);
319 pvarDest
->u
.puuid
= CoTaskMemAlloc(sizeof(CLSID
));
320 CopyMemory(pvarDest
->u
.puuid
, pvarSrc
->u
.puuid
, sizeof(CLSID
));
323 len
= strlen(pvarSrc
->u
.pszVal
);
324 pvarDest
->u
.pszVal
= CoTaskMemAlloc(len
);
325 CopyMemory(pvarDest
->u
.pszVal
, pvarSrc
->u
.pszVal
, len
);
328 len
= lstrlenW(pvarSrc
->u
.pwszVal
);
329 pvarDest
->u
.pwszVal
= CoTaskMemAlloc(len
);
330 CopyMemory(pvarDest
->u
.pwszVal
, pvarSrc
->u
.pwszVal
, len
);
334 if (pvarSrc
->u
.blob
.pBlobData
)
336 len
= pvarSrc
->u
.blob
.cbSize
;
337 pvarDest
->u
.blob
.pBlobData
= CoTaskMemAlloc(len
);
338 CopyMemory(pvarDest
->u
.blob
.pBlobData
, pvarSrc
->u
.blob
.pBlobData
, len
);
342 FIXME("Need to copy BSTR\n");
345 if (pvarSrc
->u
.pclipdata
)
347 len
= pvarSrc
->u
.pclipdata
->cbSize
- sizeof(pvarSrc
->u
.pclipdata
->ulClipFmt
);
349 CopyMemory(pvarDest
->u
.pclipdata
->pClipData
, pvarSrc
->u
.pclipdata
->pClipData
, len
);
353 if (pvarSrc
->vt
& VT_ARRAY
)
355 FIXME("Need to call SafeArrayCopy\n");
356 /* SafeArrayCopy(...); */
358 if (pvarSrc
->vt
& VT_VECTOR
)
361 switch(pvarSrc
->vt
& VT_VECTOR
)
364 elemSize
= sizeof(pvarSrc
->u
.cVal
);
367 elemSize
= sizeof(pvarSrc
->u
.bVal
);
370 elemSize
= sizeof(pvarSrc
->u
.iVal
);
373 elemSize
= sizeof(pvarSrc
->u
.uiVal
);
376 elemSize
= sizeof(pvarSrc
->u
.boolVal
);
379 elemSize
= sizeof(pvarSrc
->u
.lVal
);
382 elemSize
= sizeof(pvarSrc
->u
.ulVal
);
385 elemSize
= sizeof(pvarSrc
->u
.fltVal
);
388 elemSize
= sizeof(pvarSrc
->u
.dblVal
);
391 elemSize
= sizeof(pvarSrc
->u
.scode
);
394 elemSize
= sizeof(pvarSrc
->u
.hVal
);
397 elemSize
= sizeof(pvarSrc
->u
.uhVal
);
400 elemSize
= sizeof(pvarSrc
->u
.cyVal
);
403 elemSize
= sizeof(pvarSrc
->u
.date
);
406 elemSize
= sizeof(pvarSrc
->u
.filetime
);
409 elemSize
= sizeof(*pvarSrc
->u
.puuid
);
412 elemSize
= sizeof(*pvarSrc
->u
.pclipdata
);
419 FIXME("Invalid element type: %ul\n", pvarSrc
->vt
& VT_VECTOR
);
422 len
= pvarSrc
->u
.capropvar
.cElems
;
423 pvarDest
->u
.capropvar
.pElems
= CoTaskMemAlloc(len
* elemSize
);
424 if (pvarSrc
->vt
== (VT_VECTOR
| VT_VARIANT
))
427 for (i
= 0; i
< len
; i
++)
428 PropVariantCopy(&pvarDest
->u
.capropvar
.pElems
[i
], &pvarSrc
->u
.capropvar
.pElems
[i
]);
430 else if (pvarSrc
->vt
== (VT_VECTOR
| VT_CF
))
432 FIXME("Copy clipformats\n");
434 else if (pvarSrc
->vt
== (VT_VECTOR
| VT_BSTR
))
436 FIXME("Copy BSTRs\n");
438 else if (pvarSrc
->vt
== (VT_VECTOR
| VT_LPSTR
))
440 FIXME("Copy LPSTRs\n");
442 else if (pvarSrc
->vt
== (VT_VECTOR
| VT_LPSTR
))
444 FIXME("Copy LPWSTRs\n");
447 CopyMemory(pvarDest
->u
.capropvar
.pElems
, pvarSrc
->u
.capropvar
.pElems
, len
* elemSize
);
454 /***********************************************************************
455 * FreePropVariantArray [OLE32.195]
457 HRESULT WINAPI
FreePropVariantArray(ULONG cVariants
, /* [in] */
458 PROPVARIANT
*rgvars
) /* [in/out] */
462 TRACE("(%lu, %p)\n", cVariants
, rgvars
);
464 for(i
= 0; i
< cVariants
; i
++)
465 PropVariantClear(&rgvars
[i
]);
470 /***********************************************************************
471 * CoIsOle1Class [OLE32.29]
473 BOOL WINAPI
CoIsOle1Class(REFCLSID clsid
)
475 FIXME("%s\n", debugstr_guid(clsid
));
479 /***********************************************************************
480 * DllGetClassObject [OLE2.4]
482 HRESULT WINAPI
DllGetClassObject16(REFCLSID rclsid
, REFIID iid
, LPVOID
*ppv
)
484 FIXME("(%s, %s, %p): stub\n", debugstr_guid(rclsid
), debugstr_guid(iid
), ppv
);
488 /***********************************************************************
489 * OleSetClipboard [OLE2.49]
491 HRESULT WINAPI
OleSetClipboard16(IDataObject
* pDataObj
)
493 FIXME("(%p): stub\n", pDataObj
);
497 /***********************************************************************
498 * OleGetClipboard [OLE2.50]
500 HRESULT WINAPI
OleGetClipboard16(IDataObject
** ppDataObj
)
502 FIXME("(%p): stub\n", ppDataObj
);