ReactOS  0.4.14-dev-554-g2f8d847
ole2impl.c
Go to the documentation of this file.
1 /*
2  * Ole 2 Create functions implementation
3  *
4  * Copyright (C) 1999-2000 Abey George
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20 
21 #include <stdarg.h>
22 #include <string.h>
23 
24 #define COBJMACROS
25 #define NONAMELESSUNION
26 
27 #include "windef.h"
28 #include "winbase.h"
29 #include "wingdi.h"
30 #include "winuser.h"
31 #include "wine/debug.h"
32 #include "ole2.h"
33 #include "olestd.h"
34 #include "compobj_private.h"
35 
37 
38 /******************************************************************************
39  * OleQueryCreateFromData [OLE32.@]
40  *
41  * Checks whether an object can become an embedded object.
42  * the clipboard or OLE drag and drop.
43  * Returns : S_OK - Format that supports Embedded object creation are present.
44  * OLE_E_STATIC - Format that supports static object creation are present.
45  * S_FALSE - No acceptable format is available.
46  */
47 
49 {
50  IEnumFORMATETC *enum_fmt;
51  FORMATETC fmt;
52  BOOL found_static = FALSE;
53  HRESULT hr;
54 
55  hr = IDataObject_EnumFormatEtc(data, DATADIR_GET, &enum_fmt);
56 
57  if(FAILED(hr)) return hr;
58 
59  do
60  {
61  hr = IEnumFORMATETC_Next(enum_fmt, 1, &fmt, NULL);
62  if(hr == S_OK)
63  {
64  if(fmt.cfFormat == embedded_object_clipboard_format ||
65  fmt.cfFormat == embed_source_clipboard_format ||
66  fmt.cfFormat == filename_clipboard_format)
67  {
68  IEnumFORMATETC_Release(enum_fmt);
69  return S_OK;
70  }
71 
72  if(fmt.cfFormat == CF_METAFILEPICT ||
73  fmt.cfFormat == CF_BITMAP ||
74  fmt.cfFormat == CF_DIB)
75  found_static = TRUE;
76  }
77  } while (hr == S_OK);
78 
79  IEnumFORMATETC_Release(enum_fmt);
80 
81  return found_static ? OLE_S_STATIC : S_FALSE;
82 }
83 
84 static inline void init_fmtetc(FORMATETC *fmt, CLIPFORMAT cf, TYMED tymed)
85 {
86  fmt->cfFormat = cf;
87  fmt->ptd = NULL;
88  fmt->dwAspect = DVASPECT_CONTENT;
89  fmt->lindex = -1;
90  fmt->tymed = tymed;
91 }
92 
93 /***************************************************************************
94  * get_storage
95  *
96  * Retrieve an object's storage from a variety of sources.
97  *
98  * FIXME: CF_FILENAME.
99  */
100 static HRESULT get_storage(IDataObject *data, IStorage *stg, UINT *src_cf, BOOL other_fmts)
101 {
102  static const UINT fmt_id[] = { CF_METAFILEPICT, CF_BITMAP, CF_DIB };
103  UINT i;
104  HRESULT hr;
105  FORMATETC fmt;
106  STGMEDIUM med;
107  IPersistStorage *persist;
108  CLSID clsid;
109 
110  if (src_cf) *src_cf = 0;
111 
112  /* CF_EMBEDEDOBJECT */
114  med.tymed = TYMED_ISTORAGE;
115  med.u.pstg = stg;
116  med.pUnkForRelease = NULL;
117  hr = IDataObject_GetDataHere(data, &fmt, &med);
118  if(SUCCEEDED(hr))
119  {
120  if (src_cf) *src_cf = embedded_object_clipboard_format;
121  return hr;
122  }
123 
124  /* CF_EMBEDSOURCE */
125  init_fmtetc(&fmt, embed_source_clipboard_format, TYMED_ISTORAGE);
126  med.tymed = TYMED_ISTORAGE;
127  med.u.pstg = stg;
128  med.pUnkForRelease = NULL;
129  hr = IDataObject_GetDataHere(data, &fmt, &med);
130  if(SUCCEEDED(hr))
131  {
132  if (src_cf) *src_cf = embed_source_clipboard_format;
133  return hr;
134  }
135 
136  if (other_fmts)
137  {
138  for (i = 0; i < ARRAY_SIZE(fmt_id); i++)
139  {
140  init_fmtetc(&fmt, fmt_id[i], TYMED_ISTORAGE);
141  hr = IDataObject_QueryGetData(data, &fmt);
142  if (SUCCEEDED(hr))
143  {
144  if (src_cf) *src_cf = fmt_id[i];
145  return hr;
146  }
147  }
148  }
149 
150  /* IPersistStorage */
151  hr = IDataObject_QueryInterface(data, &IID_IPersistStorage, (void**)&persist);
152  if(FAILED(hr)) return hr;
153 
154  hr = IPersistStorage_GetClassID(persist, &clsid);
155  if(FAILED(hr)) goto end;
156 
157  hr = IStorage_SetClass(stg, &clsid);
158  if(FAILED(hr)) goto end;
159 
160  hr = IPersistStorage_Save(persist, stg, FALSE);
161  if(FAILED(hr)) goto end;
162 
163  hr = IPersistStorage_SaveCompleted(persist, NULL);
164 
165 end:
166  IPersistStorage_Release(persist);
167 
168  return hr;
169 }
170 
171 /******************************************************************************
172  * OleCreateFromDataEx [OLE32.@]
173  *
174  * Creates an embedded object from data transfer object retrieved from
175  * the clipboard or OLE drag and drop.
176  */
178  DWORD renderopt, ULONG num_cache_fmts, DWORD *adv_flags, FORMATETC *cache_fmts,
179  IAdviseSink *sink, DWORD *conns,
180  IOleClientSite *client_site, IStorage *stg, void **obj)
181 {
182  HRESULT hr;
183  UINT src_cf;
184 
185  FIXME("(%p, %s, %08x, %08x, %d, %p, %p, %p, %p, %p, %p, %p): stub\n",
186  data, debugstr_guid(iid), flags, renderopt, num_cache_fmts, adv_flags, cache_fmts,
187  sink, conns, client_site, stg, obj);
188 
189  hr = get_storage(data, stg, &src_cf, TRUE);
190  if(FAILED(hr)) return hr;
191 
192  hr = OleLoad(stg, iid, client_site, obj);
193  if(FAILED(hr)) return hr;
194 
195  /* FIXME: Init cache */
196 
197  return hr;
198 }
199 
200 /******************************************************************************
201  * OleCreateFromData [OLE32.@]
202  */
204  DWORD renderopt, LPFORMATETC fmt,
205  LPOLECLIENTSITE client_site, LPSTORAGE stg,
206  LPVOID* obj)
207 {
208  DWORD advf = ADVF_PRIMEFIRST;
209 
210  return OleCreateFromDataEx(data, iid, 0, renderopt, fmt ? 1 : 0, fmt ? &advf : NULL,
211  fmt, NULL, NULL, client_site, stg, obj);
212 }
213 
214 /******************************************************************************
215  * OleCreateLinkFromData [OLE32.@]
216  */
218  DWORD renderopt, FORMATETC *fmt,
220  void **obj)
221 {
222  FIXME("%p,%s,%08x,%p,%p,%p,%p: semi-stub\n",
223  data, debugstr_guid(iid), renderopt, fmt, client_site, stg, obj);
224  return OleCreateFromData(data, iid, renderopt, fmt, client_site, stg, obj);
225 }
226 
227 /******************************************************************************
228  * OleCreateStaticFromData [OLE32.@]
229  */
231  DWORD renderopt, FORMATETC *fmt,
233  void **obj)
234 {
235  HRESULT hr;
236  CLSID clsid;
237  IOleObject * ole_object = NULL;
238  IOleCache2 *ole_cache = NULL;
239  IPersistStorage *persist = NULL;
240  DWORD connection;
241  STGMEDIUM stgmedium;
242  LPOLESTR ole_typename;
243 
244  TRACE("(%p, %s, 0x%08x, %p, %p, %p, %p)\n",
245  data, debugstr_guid(iid), renderopt, fmt, client_site, stg, obj);
246 
247  if (!obj || !stg)
248  return E_INVALIDARG;
249 
250  if (renderopt != OLERENDER_FORMAT)
251  {
252  FIXME("semi-stub\n");
253  return OleCreateFromData(data, iid, renderopt, fmt, client_site, stg, obj);
254  }
255 
256  if (!fmt)
257  return E_INVALIDARG;
258 
259  hr = IDataObject_GetData(data, fmt, &stgmedium);
260  if (FAILED(hr)) return hr;
261 
262  switch (fmt->cfFormat)
263  {
264  case CF_BITMAP:
265  case CF_DIB:
267  break;
268  case CF_ENHMETAFILE:
270  break;
271  case CF_METAFILEPICT:
273  break;
274  default:
275  ReleaseStgMedium(&stgmedium);
276  return DV_E_CLIPFORMAT;
277  }
278  hr = OleCreateDefaultHandler(&clsid, NULL, &IID_IOleObject, (void **)&ole_object);
279  if (FAILED(hr)) goto end;
280 
281  if (client_site)
282  {
283  hr = IOleObject_SetClientSite(ole_object, client_site);
284  if (FAILED(hr)) goto end;
285  }
286 
287  hr = IOleObject_QueryInterface(ole_object, &IID_IOleCache2, (void **)&ole_cache);
288  if (FAILED(hr)) goto end;
289 
290  hr = IOleObject_QueryInterface(ole_object, &IID_IPersistStorage, (void **)&persist);
291  if (FAILED(hr)) goto end;
292 
293  hr = WriteClassStg(stg, &clsid);
294  if (FAILED(hr)) goto end;
295 
296  hr = IPersistStorage_InitNew(persist, stg);
297  if (FAILED(hr)) goto end;
298 
299  hr = IOleCache2_Cache(ole_cache, fmt, ADVF_PRIMEFIRST, &connection);
300  if (FAILED(hr)) goto end;
301 
302  hr = IOleCache2_SetData(ole_cache, fmt, &stgmedium, TRUE);
303  if (FAILED(hr)) goto end;
304  stgmedium.tymed = TYMED_NULL;
305 
306  hr = IOleObject_GetUserType(ole_object, USERCLASSTYPE_FULL, &ole_typename);
307  if(FAILED(hr))
308  ole_typename = NULL;
309  hr = WriteFmtUserTypeStg(stg, fmt->cfFormat, ole_typename);
310  CoTaskMemFree(ole_typename);
311  if (FAILED(hr)) goto end;
312 
313  hr = IPersistStorage_Save(persist, stg, TRUE);
314  if (FAILED(hr)) goto end;
315 
316  hr = IPersistStorage_SaveCompleted(persist, NULL);
317  if (FAILED(hr)) goto end;
318 
319  hr = IOleObject_QueryInterface(ole_object, iid, obj);
320 
321 end:
322  if (stgmedium.tymed == TYMED_NULL)
323  ReleaseStgMedium(&stgmedium);
324  if (persist)
325  IPersistStorage_Release(persist);
326  if (ole_cache)
327  IOleCache2_Release(ole_cache);
328  if (ole_object)
329  IOleObject_Release(ole_object);
330  return hr;
331 }
332 
333 /******************************************************************************
334  * OleCreateFromFileEx [OLE32.@]
335  */
337  DWORD renderopt, ULONG num_fmts, DWORD *adv_flags, FORMATETC *fmts, IAdviseSink *sink,
338  DWORD *conns, IOleClientSite *client_site, IStorage *stg, void **obj)
339 {
340  HRESULT hr;
341  IMoniker *mon;
342  IDataObject *data;
343  IUnknown *unk = NULL;
344  IOleCache *cache = NULL;
345  ULONG i;
346 
347  TRACE("cls %s, %s, iid %s, flags %d, render opts %d, num fmts %d, adv flags %p, fmts %p\n", debugstr_guid(clsid),
348  debugstr_w(filename), debugstr_guid(iid), flags, renderopt, num_fmts, adv_flags, fmts);
349  TRACE("sink %p, conns %p, client site %p, storage %p, obj %p\n", sink, conns, client_site, stg, obj);
350  for (i = 0; i < num_fmts; i++)
351  TRACE("\t%d: fmt %s adv flags %d\n", i, debugstr_formatetc(fmts + i), adv_flags[i]);
352 
353  hr = CreateFileMoniker( filename, &mon );
354  if (FAILED(hr)) return hr;
355 
356  hr = BindMoniker( mon, 0, &IID_IDataObject, (void**)&data );
357  IMoniker_Release( mon );
358  if (FAILED(hr)) return hr;
359 
360  hr = get_storage( data, stg, NULL, FALSE );
361  if (FAILED(hr)) goto end;
362 
363  hr = OleLoad( stg, &IID_IUnknown, client_site, (void**)&unk );
364  if (FAILED(hr)) goto end;
365 
366  if (renderopt == OLERENDER_FORMAT)
367  {
368  hr = IUnknown_QueryInterface( unk, &IID_IOleCache, (void**)&cache );
369  if (FAILED(hr)) goto end;
370 
371  for (i = 0; i < num_fmts; i++)
372  {
373  STGMEDIUM med;
374  DWORD dummy_conn;
375 
376  memset( &med, 0, sizeof(med) );
377  hr = IDataObject_GetData( data, fmts + i, &med );
378  if (FAILED(hr)) goto end;
379  hr = IOleCache_Cache( cache, fmts + i, adv_flags[i], &dummy_conn );
380  if (SUCCEEDED(hr))
381  hr = IOleCache_SetData( cache, fmts + i, &med, TRUE );
382  if (FAILED(hr))
383  {
384  ReleaseStgMedium( &med );
385  goto end;
386  }
387  }
388  }
389 
390  hr = IUnknown_QueryInterface( unk, iid, obj );
391 
392 end:
393  if (cache) IOleCache_Release( cache );
394  if (unk) IUnknown_Release( unk );
395  IDataObject_Release( data );
396  return hr;
397 }
398 
399 /******************************************************************************
400  * OleCreateFromFile [OLE32.@]
401  */
403  FORMATETC *fmt, IOleClientSite *client_site, IStorage *storage, void **obj)
404 {
405  DWORD advf = ADVF_PRIMEFIRST;
406 
407  return OleCreateFromFileEx(clsid, filename, iid, 0, renderopt, fmt ? 1 : 0, fmt ? &advf : NULL, fmt,
408  NULL, NULL, client_site, storage, obj);
409 }
410 
411 /******************************************************************************
412  * OleDuplicateData [OLE32.@]
413  *
414  * Duplicates clipboard data.
415  *
416  * PARAMS
417  * hSrc [I] Handle of the source clipboard data.
418  * cfFormat [I] The clipboard format of hSrc.
419  * uiFlags [I] Flags to pass to GlobalAlloc.
420  *
421  * RETURNS
422  * Success: handle to the duplicated data.
423  * Failure: NULL.
424  */
425 HANDLE WINAPI OleDuplicateData(HANDLE hSrc, CLIPFORMAT cfFormat,
426  UINT uiFlags)
427 {
428  HANDLE hDst = NULL;
429 
430  TRACE("(%p,%x,%x)\n", hSrc, cfFormat, uiFlags);
431 
432  if (!uiFlags) uiFlags = GMEM_MOVEABLE;
433 
434  switch (cfFormat)
435  {
436  case CF_ENHMETAFILE:
437  hDst = CopyEnhMetaFileW(hSrc, NULL);
438  break;
439  case CF_METAFILEPICT:
440  hDst = CopyMetaFileW(hSrc, NULL);
441  break;
442  case CF_PALETTE:
443  {
445  UINT nEntries = GetPaletteEntries(hSrc, 0, 0, NULL);
446  if (!nEntries) return NULL;
448  FIELD_OFFSET(LOGPALETTE, palPalEntry[nEntries]));
449  if (!logpalette) return NULL;
450  if (!GetPaletteEntries(hSrc, 0, nEntries, logpalette->palPalEntry))
451  {
453  return NULL;
454  }
455  logpalette->palVersion = 0x300;
456  logpalette->palNumEntries = (WORD)nEntries;
457 
458  hDst = CreatePalette(logpalette);
459 
461  break;
462  }
463  case CF_BITMAP:
464  {
465  LONG size;
466  BITMAP bm;
467  if (!GetObjectW(hSrc, sizeof(bm), &bm))
468  return NULL;
469  size = GetBitmapBits(hSrc, 0, NULL);
470  if (!size) return NULL;
471  bm.bmBits = HeapAlloc(GetProcessHeap(), 0, size);
472  if (!bm.bmBits) return NULL;
473  if (GetBitmapBits(hSrc, size, bm.bmBits))
474  hDst = CreateBitmapIndirect(&bm);
475  HeapFree(GetProcessHeap(), 0, bm.bmBits);
476  break;
477  }
478  default:
479  {
480  SIZE_T size = GlobalSize(hSrc);
481  LPVOID pvSrc = NULL;
482  LPVOID pvDst = NULL;
483 
484  /* allocate space for object */
485  if (!size) return NULL;
486  hDst = GlobalAlloc(uiFlags, size);
487  if (!hDst) return NULL;
488 
489  /* lock pointers */
490  pvSrc = GlobalLock(hSrc);
491  if (!pvSrc)
492  {
493  GlobalFree(hDst);
494  return NULL;
495  }
496  pvDst = GlobalLock(hDst);
497  if (!pvDst)
498  {
499  GlobalUnlock(hSrc);
500  GlobalFree(hDst);
501  return NULL;
502  }
503  /* copy data */
504  memcpy(pvDst, pvSrc, size);
505 
506  /* cleanup */
507  GlobalUnlock(hDst);
508  GlobalUnlock(hSrc);
509  }
510  }
511 
512  TRACE("returning %p\n", hDst);
513  return hDst;
514 }
interface IStorage * LPSTORAGE
Definition: objfwd.h:30
static IClassFactory * cf
Definition: cache.c:48
WCHAR OLECHAR
Definition: compat.h:1941
static const LOGPALETTE logpalette
Definition: clipboard.c:1346
static void init_fmtetc(FORMATETC *fmt, CLIPFORMAT cf, TYMED tymed)
Definition: ole2impl.c:84
UINT WINAPI GetPaletteEntries(HPALETTE hpal, UINT iStartIndex, UINT cEntries, LPPALETTEENTRY ppe)
Definition: palette.c:64
static IOleClientSite * client_site
Definition: activex.c:198
#define REFIID
Definition: guiddef.h:118
#define TRUE
Definition: types.h:120
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:368
UINT filename_clipboard_format
Definition: clipboard.c:204
HBITMAP WINAPI CreateBitmapIndirect(_In_ const BITMAP *pbm)
HRESULT WINAPI WriteFmtUserTypeStg(LPSTORAGE pstg, CLIPFORMAT cf, LPOLESTR lpszUserType)
Definition: storage32.c:9356
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:420
#define CF_ENHMETAFILE
Definition: constants.h:409
HRESULT hr
Definition: shlfolder.c:183
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
Definition: ole2.c:2033
HRESULT WINAPI OleCreateFromFileEx(REFCLSID clsid, const OLECHAR *filename, REFIID iid, DWORD flags, DWORD renderopt, ULONG num_fmts, DWORD *adv_flags, FORMATETC *fmts, IAdviseSink *sink, DWORD *conns, IOleClientSite *client_site, IStorage *stg, void **obj)
Definition: ole2impl.c:336
HRESULT WINAPI OleCreateStaticFromData(IDataObject *data, REFIID iid, DWORD renderopt, FORMATETC *fmt, IOleClientSite *client_site, IStorage *stg, void **obj)
Definition: ole2impl.c:230
#define REFCLSID
Definition: guiddef.h:117
const char * fmt
Definition: wsprintf.c:30
const GUID IID_IDataObject
UINT embedded_object_clipboard_format
Definition: clipboard.c:207
#define DV_E_CLIPFORMAT
Definition: winerror.h:2639
const GUID IID_IPersistStorage
GLuint GLuint end
Definition: gl.h:1545
HANDLE WINAPI OleDuplicateData(HANDLE hSrc, CLIPFORMAT cfFormat, UINT uiFlags)
Definition: ole2impl.c:425
#define CF_METAFILEPICT
Definition: constants.h:398
const char * filename
Definition: ioapi.h:135
static LPOLESTR
Definition: stg_prop.c:27
const CLSID CLSID_Picture_Dib
GLsizei GLenum GLboolean sink
Definition: glext.h:5672
HRESULT WINAPI OleQueryCreateFromData(IDataObject *data)
Definition: ole2impl.c:48
WORD palVersion
Definition: wingdi.h:1832
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
Definition: heapmem.c:1090
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int BOOL
Definition: ntddk_ex.h:94
HRESULT WINAPI OleLoad(LPSTORAGE pStg, REFIID riid, LPOLECLIENTSITE pClientSite, LPVOID *ppvObj)
Definition: ole2.c:1224
long LONG
Definition: pedump.c:60
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
#define S_FALSE
Definition: winerror.h:2357
static struct fmt fmts[]
#define E_INVALIDARG
Definition: ddrawi.h:101
#define CF_BITMAP
Definition: constants.h:397
smooth NULL
Definition: ftsmooth.c:416
HRESULT WINAPI OleCreateFromData(LPDATAOBJECT data, REFIID iid, DWORD renderopt, LPFORMATETC fmt, LPOLECLIENTSITE client_site, LPSTORAGE stg, LPVOID *obj)
Definition: ole2impl.c:203
HRESULT WINAPI OleCreateLinkFromData(IDataObject *data, REFIID iid, DWORD renderopt, FORMATETC *fmt, IOleClientSite *client_site, IStorage *stg, void **obj)
Definition: ole2impl.c:217
#define debugstr_guid
Definition: kernel32.h:35
const GUID IID_IOleObject
static HRESULT get_storage(IDataObject *data, IStorage *stg, UINT *src_cf, BOOL other_fmts)
Definition: ole2impl.c:100
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:403
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
const char * debugstr_formatetc(const FORMATETC *formatetc) DECLSPEC_HIDDEN
Definition: datacache.c:216
LONG HRESULT
Definition: typedefs.h:77
HPALETTE WINAPI CreatePalette(_In_reads_(_Inexpressible_(2 *sizeof(WORD)+plpal->palNumEntries *sizeof(PALETTEENTRY))) const LOGPALETTE *)
HRESULT WINAPI CreateFileMoniker(LPCOLESTR lpszPathName, IMoniker **ppmk)
Definition: filemoniker.c:1414
const GUID IID_IUnknown
const CLSID CLSID_Picture_EnhMetafile
LONG WINAPI GetBitmapBits(_In_ HBITMAP hbit, _In_ LONG cb, _Out_writes_bytes_(cb) LPVOID lpvBits)
#define WINAPI
Definition: msvc.h:8
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
Definition: heapmem.c:611
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLbitfield flags
Definition: glext.h:7161
HENHMETAFILE WINAPI CopyEnhMetaFileW(_In_ HENHMETAFILE hemfSrc, _In_opt_ LPCWSTR pszFile)
REFCLSID clsid
Definition: msctf.c:82
#define OLE_S_STATIC
Definition: winerror.h:2609
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
Definition: heapmem.c:755
#define CF_PALETTE
Definition: constants.h:404
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
HRESULT WINAPI OleCreateFromFile(REFCLSID clsid, const OLECHAR *filename, REFIID iid, DWORD renderopt, FORMATETC *fmt, IOleClientSite *client_site, IStorage *storage, void **obj)
Definition: ole2impl.c:402
interface IDataObject * LPDATAOBJECT
Definition: objfwd.h:21
ULONG_PTR SIZE_T
Definition: typedefs.h:78
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
const GUID IID_IOleCache2
HRESULT WINAPI WriteClassStg(IStorage *pStg, REFCLSID rclsid)
Definition: storage32.c:9078
#define S_OK
Definition: intsafe.h:59
static DWORD tymed
Definition: url.c:174
const CLSID CLSID_Picture_Metafile
HRESULT WINAPI OleCreateDefaultHandler(REFCLSID clsid, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObj)
#define ARRAY_SIZE(a)
Definition: main.h:24
Definition: bl.h:1331
HMETAFILE WINAPI CopyMetaFileW(_In_ HMETAFILE hmfSrc, _In_opt_ LPCWSTR pszFile)
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:254
HRESULT WINAPI BindMoniker(LPMONIKER pmk, DWORD grfOpt, REFIID riid, LPVOID *ppvResult)
Definition: bindctx.c:602
unsigned int UINT
Definition: ndis.h:50
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
HRESULT WINAPI OleCreateFromDataEx(IDataObject *data, REFIID iid, DWORD flags, DWORD renderopt, ULONG num_cache_fmts, DWORD *adv_flags, FORMATETC *cache_fmts, IAdviseSink *sink, DWORD *conns, IOleClientSite *client_site, IStorage *stg, void **obj)
Definition: ole2impl.c:177
UINT embed_source_clipboard_format
Definition: clipboard.c:208
unsigned int ULONG
Definition: retypes.h:1
WINE_DEFAULT_DEBUG_CHANNEL(ole)
WORD palNumEntries
Definition: wingdi.h:1833
#define memset(x, y, z)
Definition: compat.h:39
Definition: dsound.c:943
#define HeapFree(x, y, z)
Definition: compat.h:402
#define GMEM_MOVEABLE
Definition: winbase.h:291
const GUID IID_IOleCache
#define SUCCEEDED(hr)
Definition: intsafe.h:57
#define CF_DIB
Definition: constants.h:403