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
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
);
45 /******************************************************************************
46 * OleDuplicateData [OLE32.102]
48 HRESULT WINAPI
OleDuplicateData(HANDLE hSrc
, CLIPFORMAT cfFormat
,
51 FIXME("(%p,%x,%x), stub!\n", hSrc
, cfFormat
, uiFlags
);
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
);
66 /******************************************************************************
67 * SetConvertStg [OLE32.142]
69 HRESULT WINAPI
SetConvertStg(LPSTORAGE pStg
, BOOL fConvert
)
71 FIXME("(%p,%x), stub!\n", pStg
, fConvert
);
75 /******************************************************************************
76 * OleCreate [OLE32.89]
79 HRESULT WINAPI
OleCreate(
83 LPFORMATETC pFormatEtc
,
84 LPOLECLIENTSITE pClientSite
,
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
))))
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
);
118 TRACE("-- %p \n", pUnk
);
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");
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");
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
);
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");
164 /******************************************************************************
165 * OleCreateLinkFromData [OLE32.95]
168 HRESULT WINAPI
OleCreateLinkFromData(LPDATAOBJECT pSrcDataObj
, REFIID riid
,
169 DWORD renderopt
, LPFORMATETC pFormatEtc
,
170 LPOLECLIENTSITE pClientSite
, LPSTORAGE pStg
,
173 FIXME("(not shown), stub!\n");
177 /******************************************************************************
178 * OleIsRunning [OLE32.111]
180 BOOL WINAPI
OleIsRunning(LPOLEOBJECT pObject
)
182 FIXME("(%p), stub!\n", pObject
);
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 (
201 LPENUMFORMATETC
* ppenumFormatetc
)
203 FIXME("(%p, %ld, %p), stub!\n", clsid
, dwDirection
, ppenumFormatetc
);
208 /***********************************************************************
209 * OLE_FreeClipDataArray [internal]
212 * frees the data associated with an array of CLIPDATAs
214 static void OLE_FreeClipDataArray(ULONG count
, CLIPDATA
* pClipDataArray
)
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
);
241 case VT_STREAMED_OBJECT
:
243 case VT_STORED_OBJECT
:
244 IUnknown_Release((LPUNKNOWN
)pvar
->u
.pStream
);
249 CoTaskMemFree(pvar
->u
.puuid
); /* pick an arbitary typed pointer - we don't care about the type as we are just freeing it */
253 CoTaskMemFree(pvar
->u
.blob
.pBlobData
);
256 FIXME("Need to load OLEAUT32 for SysFreeString\n");
257 /* SysFreeString(pvar->u.bstrVal); */
260 if (pvar
->u
.pclipdata
)
262 OLE_FreeClipDataArray(1, pvar
->u
.pclipdata
);
263 CoTaskMemFree(pvar
->u
.pclipdata
);
267 if (pvar
->vt
& VT_ARRAY
)
269 FIXME("Need to call SafeArrayDestroy\n");
270 /* SafeArrayDestroy(pvar->u.caub); */
272 switch (pvar
->vt
& VT_VECTOR
)
275 FreePropVariantArray(pvar
->u
.capropvar
.cElems
, pvar
->u
.capropvar
.pElems
);
278 OLE_FreeClipDataArray(pvar
->u
.caclipdata
.cElems
, pvar
->u
.caclipdata
.pElems
);
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
));
296 /***********************************************************************
297 * PropVariantCopy [OLE32.246]
299 HRESULT WINAPI
PropVariantCopy(PROPVARIANT
*pvarDest
, /* [out] FIXME: PROPVARIANT * */
300 const PROPVARIANT
*pvarSrc
) /* [in] FIXME: const PROPVARIANT * */
303 TRACE("(%p, %p): stub:\n", pvarDest
, pvarSrc
);
305 /* this will deal with most cases */
306 CopyMemory(pvarDest
, pvarSrc
, sizeof(*pvarDest
));
311 case VT_STREAMED_OBJECT
:
313 case VT_STORED_OBJECT
:
314 IUnknown_AddRef((LPUNKNOWN
)pvarDest
->u
.pStream
);
317 pvarDest
->u
.puuid
= CoTaskMemAlloc(sizeof(CLSID
));
318 CopyMemory(pvarDest
->u
.puuid
, pvarSrc
->u
.puuid
, sizeof(CLSID
));
321 len
= strlen(pvarSrc
->u
.pszVal
);
322 pvarDest
->u
.pszVal
= CoTaskMemAlloc(len
);
323 CopyMemory(pvarDest
->u
.pszVal
, pvarSrc
->u
.pszVal
, len
);
326 len
= lstrlenW(pvarSrc
->u
.pwszVal
);
327 pvarDest
->u
.pwszVal
= CoTaskMemAlloc(len
);
328 CopyMemory(pvarDest
->u
.pwszVal
, pvarSrc
->u
.pwszVal
, len
);
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
);
340 FIXME("Need to copy BSTR\n");
343 if (pvarSrc
->u
.pclipdata
)
345 len
= pvarSrc
->u
.pclipdata
->cbSize
- sizeof(pvarSrc
->u
.pclipdata
->ulClipFmt
);
347 CopyMemory(pvarDest
->u
.pclipdata
->pClipData
, pvarSrc
->u
.pclipdata
->pClipData
, len
);
351 if (pvarSrc
->vt
& VT_ARRAY
)
353 FIXME("Need to call SafeArrayCopy\n");
354 /* SafeArrayCopy(...); */
356 if (pvarSrc
->vt
& VT_VECTOR
)
359 switch(pvarSrc
->vt
& VT_VECTOR
)
362 elemSize
= sizeof(pvarSrc
->u
.cVal
);
365 elemSize
= sizeof(pvarSrc
->u
.bVal
);
368 elemSize
= sizeof(pvarSrc
->u
.iVal
);
371 elemSize
= sizeof(pvarSrc
->u
.uiVal
);
374 elemSize
= sizeof(pvarSrc
->u
.boolVal
);
377 elemSize
= sizeof(pvarSrc
->u
.lVal
);
380 elemSize
= sizeof(pvarSrc
->u
.ulVal
);
383 elemSize
= sizeof(pvarSrc
->u
.fltVal
);
386 elemSize
= sizeof(pvarSrc
->u
.dblVal
);
389 elemSize
= sizeof(pvarSrc
->u
.scode
);
392 elemSize
= sizeof(pvarSrc
->u
.hVal
);
395 elemSize
= sizeof(pvarSrc
->u
.uhVal
);
398 elemSize
= sizeof(pvarSrc
->u
.cyVal
);
401 elemSize
= sizeof(pvarSrc
->u
.date
);
404 elemSize
= sizeof(pvarSrc
->u
.filetime
);
407 elemSize
= sizeof(*pvarSrc
->u
.puuid
);
410 elemSize
= sizeof(*pvarSrc
->u
.pclipdata
);
417 FIXME("Invalid element type: %ul\n", pvarSrc
->vt
& VT_VECTOR
);
420 len
= pvarSrc
->u
.capropvar
.cElems
;
421 pvarDest
->u
.capropvar
.pElems
= CoTaskMemAlloc(len
* elemSize
);
422 if (pvarSrc
->vt
== (VT_VECTOR
| VT_VARIANT
))
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");
445 CopyMemory(pvarDest
->u
.capropvar
.pElems
, pvarSrc
->u
.capropvar
.pElems
, len
* elemSize
);
452 /***********************************************************************
453 * FreePropVariantArray [OLE32.195]
455 HRESULT WINAPI
FreePropVariantArray(ULONG cVariants
, /* [in] */
456 PROPVARIANT
*rgvars
) /* [in/out] */
460 TRACE("(%lu, %p)\n", cVariants
, rgvars
);
462 for(i
= 0; i
< cVariants
; i
++)
463 PropVariantClear(&rgvars
[i
]);
468 /***********************************************************************
469 * CoIsOle1Class [OLE32.29]
471 BOOL WINAPI
CoIsOle1Class(REFCLSID clsid
)
473 FIXME("%s\n", debugstr_guid(clsid
));
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
);
486 /***********************************************************************
487 * OleSetClipboard [OLE2.49]
489 HRESULT WINAPI
OleSetClipboard16(IDataObject
* pDataObj
)
491 FIXME("(%p): stub\n", pDataObj
);
495 /***********************************************************************
496 * OleGetClipboard [OLE2.50]
498 HRESULT WINAPI
OleGetClipboard16(IDataObject
** ppDataObj
)
500 FIXME("(%p): stub\n", ppDataObj
);