35#define InitFormatEtc(fe, cf, med) \
38 (fe).dwAspect=DVASPECT_CONTENT;\
48 sprintf(
buf,
"cf %04x ptd %p aspect %lx lindex %ld tymed %lx",
120 IEnumFORMATETC_AddRef(iface);
121 *ppvObj = &
This->IEnumFORMATETC_iface;
149 FORMATETC *rgelt,
ULONG *pceltFetched)
155 trace(
"next: count %ld cur %d\n", celt,
This->cur);
172 *pceltFetched =
count;
178 ok(0,
"unexpected call\n");
192 ok(0,
"unexpected call\n");
214 ret->fmtetc_cnt = fmtetc_cnt;
215 ret->fmtetc =
malloc(fmtetc_cnt *
sizeof(FORMATETC));
216 memcpy(
ret->fmtetc, fmtetc, fmtetc_cnt*
sizeof(FORMATETC));
217 *lplpformatetc = &
ret->IEnumFORMATETC_iface;
226 IDataObject_AddRef(iface);
227 *ppvObj = &
This->IDataObject_iface;
250 for(
i = 0;
i <
This->fmtetc_cnt;
i++)
253 if(
This->stm) IStream_Release(
This->stm);
254 if(
This->stg) IStorage_Release(
This->stg);
276 ok(pmedium->tymed == 0,
"pmedium->tymed = %lu\n", pmedium->tymed);
277 ok(pmedium->hGlobal ==
NULL,
"pmedium->hGlobal = %p\n", pmedium->hGlobal);
278 ok(pmedium->pUnkForRelease ==
NULL,
"pmedium->pUnkForRelease = %p\n", pmedium->pUnkForRelease);
280 if(pformatetc->lindex != -1)
283 for(
i = 0;
i <
This->fmtetc_cnt;
i++)
285 if(
This->fmtetc[
i].cfFormat == pformatetc->cfFormat)
287 if(
This->fmtetc[
i].tymed & pformatetc->tymed)
289 pmedium->pUnkForRelease = (
LPUNKNOWN)iface;
290 IUnknown_AddRef(pmedium->pUnkForRelease);
294 pmedium->tymed = TYMED_HGLOBAL;
295 pmedium->hGlobal =
This->text;
297 else if(pformatetc->cfFormat ==
cf_stream)
299 pmedium->tymed = TYMED_ISTREAM;
300 IStream_AddRef(
This->stm);
301 pmedium->pstm =
This->stm;
305 pmedium->tymed = TYMED_ISTORAGE;
306 IStorage_AddRef(
This->stg);
307 pmedium->pstg =
This->stg;
311 pmedium->tymed = TYMED_MFPICT;
312 pmedium->hMetaFilePict =
This->hmfp;
338 ok(0,
"unexpected call to DataObjectImpl_QueryGetData\n");
340 if(pformatetc->lindex != -1)
343 for(
i=0;
i<
This->fmtetc_cnt;
i++) {
344 if(
This->fmtetc[
i].cfFormat == pformatetc->cfFormat) {
346 if(
This->fmtetc[
i].tymed == pformatetc->tymed)
354 FORMATETC *pformatetcOut)
356 ok(0,
"unexpected call\n");
361 STGMEDIUM *pmedium,
BOOL fRelease)
363 ok(0,
"unexpected call\n");
374 if(dwDirection != DATADIR_GET) {
375 ok(0,
"unexpected direction %ld\n", dwDirection);
384 ok(0,
"unexpected call\n");
390 ok(0,
"unexpected call\n");
396 ok(0,
"unexpected call\n");
429 obj->fmtetc =
malloc(
obj->fmtetc_cnt *
sizeof(FORMATETC));
465 ILockBytes_Release(lbs);
471 obj->fmtetc =
calloc(
obj->fmtetc_cnt,
sizeof(FORMATETC));
478 memset(&dm, 0,
sizeof(dm));
484 obj->fmtetc[3].ptd->tdDriverNameOffset =
FIELD_OFFSET(DVTARGETDEVICE, tdData);
485 obj->fmtetc[3].ptd->tdDeviceNameOffset = 0;
486 obj->fmtetc[3].ptd->tdPortNameOffset = 0;
487 obj->fmtetc[3].ptd->tdExtDevmodeOffset =
obj->fmtetc[3].ptd->tdDriverNameOffset +
sizeof(
device_name);
496 obj->fmtetc[7].dwAspect = DVASPECT_ICON;
505 REFCLSID rclsid = &CLSID_InternetZoneManager;
512 ok(
hr ==
S_OK,
"OleGetClipboard() got 0x%08lx instead of 0x%08lx\n",
hr,
S_OK);
513 ok(!!pDObj && pDObj != (
IDataObject *)0xdeadbeef,
"Got unexpected pDObj %p.\n", pDObj);
525 IDataObject_Release(pDObj);
536 ok(
hr ==
E_INVALIDARG,
"OleGetClipboard(NULL) should return E_INVALIDARG instead of 0x%08lx\n",
hr);
539 ok(
hr ==
S_OK,
"OleGetClipboard failed with error 0x%08lx\n",
hr);
547 hr = IDataObject_QueryGetData(data_obj, &fmtetc);
548 ok(
hr ==
S_OK,
"IDataObject_QueryGetData failed with error 0x%08lx\n",
hr);
551 fmtetc.dwAspect = 0xdeadbeef;
552 hr = IDataObject_QueryGetData(data_obj, &fmtetc);
553 ok(
hr ==
DV_E_FORMATETC,
"IDataObject_QueryGetData should have failed with DV_E_FORMATETC instead of 0x%08lx\n",
hr);
556 fmtetc.dwAspect = DVASPECT_THUMBNAIL;
557 hr = IDataObject_QueryGetData(data_obj, &fmtetc);
558 ok(
hr ==
DV_E_FORMATETC,
"IDataObject_QueryGetData should have failed with DV_E_FORMATETC instead of 0x%08lx\n",
hr);
562 hr = IDataObject_QueryGetData(data_obj, &fmtetc);
564 "IDataObject_QueryGetData should have failed with DV_E_FORMATETC instead of 0x%08lx\n",
hr);
567 hr = IDataObject_QueryGetData(data_obj, &fmtetc);
568 ok(
hr ==
DV_E_CLIPFORMAT,
"IDataObject_QueryGetData should have failed with DV_E_CLIPFORMAT instead of 0x%08lx\n",
hr);
571 hr = IDataObject_QueryGetData(data_obj, &fmtetc);
572 ok(
hr ==
S_OK,
"IDataObject_QueryGetData failed with error 0x%08lx\n",
hr);
581 hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium);
582 ok(
hr ==
S_OK,
"IDataObject_GetData failed with error 0x%08lx\n",
hr);
586 fmtetc.dwAspect = 0xdeadbeef;
587 hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium);
588 ok(
hr ==
S_OK,
"IDataObject_GetData failed with error 0x%08lx\n",
hr);
592 fmtetc.dwAspect = DVASPECT_THUMBNAIL;
593 hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium);
594 ok(
hr ==
S_OK,
"IDataObject_GetData failed with error 0x%08lx\n",
hr);
599 hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium);
609 hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium);
610 ok(
hr ==
DV_E_FORMATETC,
"IDataObject_GetData should have failed with DV_E_FORMATETC instead of 0x%08lx\n",
hr);
614 hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium);
615 ok(
hr ==
DV_E_TYMED,
"IDataObject_GetData should have failed with DV_E_TYMED instead of 0x%08lx\n",
hr);
620 IDataObject_Release(data_obj);
628 FORMATETC
fmt, src_fmt;
632 ok(
hr ==
S_OK,
"OleGetClipboard failed with error 0x%08lx\n",
hr);
634 hr = IDataObject_EnumFormatEtc(
data, DATADIR_SET, &enum_fmt);
640 hr = IDataObject_EnumFormatEtc(
data, DATADIR_GET, &enum_fmt);
645 skip(
"EnumFormatEtc failed, skipping tests.\n");
649 if(
src) IDataObject_EnumFormatEtc(
src, DATADIR_GET, &src_enum);
651 while((
hr = IEnumFORMATETC_Next(enum_fmt, 1, &
fmt,
NULL)) ==
S_OK)
654 hr = IEnumFORMATETC_Next(src_enum, 1, &src_fmt,
NULL);
657 ok(
fmt.cfFormat == src_fmt.cfFormat,
"%ld: %04x %04x\n",
count,
fmt.cfFormat, src_fmt.cfFormat);
658 ok(
fmt.dwAspect == src_fmt.dwAspect,
"%ld: %08lx %08lx\n",
count,
fmt.dwAspect, src_fmt.dwAspect);
659 ok(
fmt.lindex == src_fmt.lindex,
"%ld: %08lx %08lx\n",
count,
fmt.lindex, src_fmt.lindex);
660 ok(
fmt.tymed == src_fmt.tymed,
"%ld: %08lx %08lx\n",
count,
fmt.tymed, src_fmt.tymed);
663 ok(src_fmt.ptd !=
NULL,
"%ld: expected non-NULL\n",
count);
674 hr = IEnumFORMATETC_Next(src_enum, 1, &src_fmt,
NULL);
676 IEnumFORMATETC_Release(src_enum);
679 hr = IEnumFORMATETC_Reset(enum_fmt);
687 hr = IEnumFORMATETC_Next(enum_fmt, 1, &third_fmt,
NULL);
689 hr = IEnumFORMATETC_Next(enum_fmt, 1, &third_fmt,
NULL);
691 hr = IEnumFORMATETC_Next(enum_fmt, 1, &third_fmt,
NULL);
694 hr = IEnumFORMATETC_Reset(enum_fmt);
696 hr = IEnumFORMATETC_Skip(enum_fmt, 2);
699 hr = IEnumFORMATETC_Clone(enum_fmt, &clone);
701 hr = IEnumFORMATETC_Next(enum_fmt, 1, &
fmt,
NULL);
703 ok(
fmt.cfFormat == third_fmt.cfFormat,
"formats don't match\n");
704 hr = IEnumFORMATETC_Next(clone, 1, &
fmt,
NULL);
706 ok(
fmt.cfFormat == third_fmt.cfFormat,
"formats don't match\n");
707 IEnumFORMATETC_Release(clone);
710 IEnumFORMATETC_Release(enum_fmt);
711 IDataObject_Release(
data);
722 ok(!
h,
"got %p\n",
h);
724 ok(!
h,
"got %p\n",
h);
740 if(
cf == cf_dataobject)
747 found_dataobject =
TRUE;
750 ok(*
ptr == clip_owner,
"hwnd %p clip_owner %p\n", *
ptr, clip_owner);
755 else if(
cf == cf_ole_priv_data)
757 found_priv_data =
TRUE;
765 win_skip(
"Ole Private Data in win9x format\n");
775 BOOL first_use_of_cf;
785 struct formatetcetc
fmts[1];
786 } *priv = (
struct priv_data*)
ptr;
787 CLIPFORMAT cfs_seen[10];
789 hr = IDataObject_EnumFormatEtc(
data, DATADIR_GET, &enum_fmt);
791 fmt_ptr = priv->fmts;
793 while(IEnumFORMATETC_Next(enum_fmt, 1, &
fmt,
NULL) ==
S_OK)
798 ok(fmt_ptr->fmt.cfFormat ==
fmt.cfFormat,
799 "got %08x expected %08x\n", fmt_ptr->fmt.cfFormat,
fmt.cfFormat);
800 ok(fmt_ptr->fmt.dwAspect ==
fmt.dwAspect,
"got %08lx expected %08lx\n",
801 fmt_ptr->fmt.dwAspect,
fmt.dwAspect);
802 ok(fmt_ptr->fmt.lindex ==
fmt.lindex,
"got %08lx expected %08lx\n",
803 fmt_ptr->fmt.lindex,
fmt.lindex);
804 ok(fmt_ptr->fmt.tymed ==
fmt.tymed,
"got %08lx expected %08lx\n",
805 fmt_ptr->fmt.tymed,
fmt.tymed);
807 if(fmt_ptr->fmt.cfFormat == cfs_seen[
i])
813 ok(fmt_ptr->first_use_of_cf != seen_cf,
"got %08x expected %08x\n",
814 fmt_ptr->first_use_of_cf, !seen_cf);
815 ok(fmt_ptr->res[0] == 0,
"got %08lx\n", fmt_ptr->res[0]);
816 ok(fmt_ptr->res[1] == 0,
"got %08lx\n", fmt_ptr->res[1]);
821 ok(fmt_ptr->fmt.ptd !=
NULL,
"target device offset zero\n");
829 ok(priv->res1 == 0,
"got %08lx\n", priv->res1);
830 ok(priv->res2 == 1,
"got %08lx\n", priv->res2);
831 ok(priv->count ==
count,
"got %08lx expected %08lx\n", priv->count,
count);
832 ok(priv->res3[0] == 0,
"got %08lx\n", priv->res3[0]);
835 if(
sizeof(fmt_ptr->fmt.ptd) == 8)
836 todo_wine ok(priv->res3[1] == 1,
"got %08lx\n", priv->res3[1]);
838 ok(priv->res3[1] == 0,
"got %08lx\n", priv->res3[1]);
841 IEnumFORMATETC_Release(enum_fmt);
879 ok(found_dataobject,
"didn't find cf_dataobject\n");
880 ok(found_priv_data,
"didn't find cf_ole_priv_data\n");
891 ok(
hr ==
S_OK,
"OleGetClipboard failed with error 0x%08lx\n",
hr);
896 hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium);
897 ok(
hr ==
S_OK,
"IDataObject_GetData failed with error 0x%08lx\n",
hr);
901 hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium);
902 ok(
hr ==
DV_E_TYMED,
"IDataObject_GetData failed with error 0x%08lx\n",
hr);
906 hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium);
907 ok(
hr ==
DV_E_TYMED,
"IDataObject_GetData failed with error 0x%08lx\n",
hr);
911 hr = IDataObject_GetData(data_obj, &fmtetc, &stgmedium);
912 ok(
hr ==
S_OK,
"IDataObject_GetData failed with error 0x%08lx\n",
hr);
916 "DataObjectImpl_GetData called 5 times instead of %ld times\n",
918 IDataObject_Release(data_obj);
936 ok(
hr ==
S_OK,
"Failed to create data1 object: 0x%08lx\n",
hr);
940 ok(
hr ==
S_OK,
"Failed to create data2 object: 0x%08lx\n",
hr);
944 ok(
hr ==
S_OK,
"Failed to create complex data object: 0x%08lx\n",
hr);
957 ok(
hr ==
S_OK,
"OleInitialize failed with error 0x%08lx\n",
hr);
960 ok(
hr ==
S_OK,
"failed to set clipboard to data1, hr = 0x%08lx\n",
hr);
965 ok(
hr ==
S_OK,
"expected current clipboard to be data1, hr = 0x%08lx\n",
hr);
967 ok(
hr ==
S_FALSE,
"did not expect current clipboard to be data2, hr = 0x%08lx\n",
hr);
974 ok(
hr ==
S_OK,
"failed to set clipboard to data2, hr = 0x%08lx\n",
hr);
976 ok(
hr ==
S_FALSE,
"did not expect current clipboard to be data1, hr = 0x%08lx\n",
hr);
978 ok(
hr ==
S_OK,
"expected current clipboard to be data2, hr = 0x%08lx\n",
hr);
986 ok(
ptr &&
ptr != hblob,
"got fixed block %p / %p\n",
ptr, hblob );
990 ok(
h == hblob,
"got %p\n",
h);
992 ok(
h == hblob,
"got %p / %p\n",
h, hblob);
999 ok(
hr ==
S_OK,
"failed to flush clipboard, hr = 0x%08lx\n",
hr);
1001 ok(
hr ==
S_FALSE,
"did not expect current clipboard to be data1, hr = 0x%08lx\n",
hr);
1003 ok(
hr ==
S_FALSE,
"did not expect current clipboard to be data2, hr = 0x%08lx\n",
hr);
1010 ok(
h == hblob,
"got %p\n",
h);
1019 ok(
hr ==
S_OK,
"Failed to clear clipboard, hr = 0x%08lx\n",
hr);
1026 trace(
"setting complex\n");
1028 ok(
hr ==
S_OK,
"failed to set clipboard to complex data, hr = 0x%08lx\n",
hr);
1034 ok(
hr ==
S_OK,
"failed to clear clipboard, hr = 0x%08lx.\n",
hr);
1040 ok(
ref == 0,
"expected data1 ref=0, got %ld\n",
ref);
1042 ok(
ref == 0,
"expected data2 ref=0, got %ld\n",
ref);
1043 ref = IDataObject_Release(data_cmpl);
1044 ok(
ref == 0,
"expected data_cmpl ref=0, got %ld\n",
ref);
1067 "OleIsCurrentClipboard returned %lx\n",
hr );
1103 ok(
hr ==
S_OK,
"Failed to create data object: 0x%08lx\n",
hr);
1105 memset(&cls, 0,
sizeof(cls));
1111 viewer =
CreateWindowA(
"clipboard_test",
NULL, 0, 0, 0, 0, 0,
NULL, 0,
NULL, 0);
1116 ok(
ret == 1,
"%u WM_DRAWCLIPBOARD received\n",
ret );
1119 ok(
hr ==
S_OK,
"OleInitialize failed with error 0x%08lx\n",
hr);
1122 ok( !
ret,
"%u WM_DRAWCLIPBOARD received\n",
ret );
1131 ok(
hr ==
S_OK,
"failed to set clipboard to data, hr = 0x%08lx\n",
hr);
1134 ok(
ret == 2,
"%u WM_DRAWCLIPBOARD received\n",
ret );
1138 ok(
hr ==
S_OK,
"failed to flush clipboard, hr = 0x%08lx\n",
hr);
1139 ret = IDataObject_Release(
data);
1149 IDataObject_AddRef(
d);
1150 return IDataObject_Release(
d);
1157 ULONG refs, old_refs;
1182 ok(get1 == get2,
"data objects differ\n");
1183 refs = IDataObject_Release(get2);
1184 ok(refs == (get1 == get2 ? 1 : 0),
"got %ld\n", refs);
1189 hr = IDataObject_GetData(get1, &
fmt, &med);
1197 ok(get1 != get2,
"data objects match\n");
1200 ok(
hr ==
S_OK,
"Failed to clear clipboard, hr %#lx.\n",
hr);
1205 ok(get1 != get3,
"data objects match\n");
1206 ok(get2 != get3,
"data objects match\n");
1208 IDataObject_Release(get3);
1209 IDataObject_Release(get2);
1210 IDataObject_Release(get1);
1224 ok(refs == old_refs,
"%ld %ld\n", refs, old_refs);
1227 hr = IDataObject_GetData(get1, &
fmt, &med);
1232 ok(refs == old_refs + 1,
"%ld %ld\n", refs, old_refs);
1237 hr = IDataObject_GetData(get1, &
fmt, &med);
1243 ok(refs == 2,
"%ld\n", refs);
1245 IDataObject_Release(get1);
1248 ok(refs == 1,
"%ld\n", refs);
1262 ok(refs == old_refs,
"%ld %ld\n", refs, old_refs);
1270 hr = IDataObject_GetData(get1, &
fmt, &med);
1276 ok(refs == 1,
"%ld\n", refs);
1278 ok(refs == old_refs + 1,
"%ld %ld\n", refs, old_refs);
1281 ok(
hr ==
S_OK,
"Failed to clear clipboard, hr %#lx.\n",
hr);
1284 ok(refs == 2,
"%ld\n", refs);
1286 IDataObject_Release(get1);
1288 IDataObject_Release(src2);
1293 ok(old_refs == 1,
"%ld\n", old_refs);
1296 ok(
hr ==
S_OK,
"Failed to clear clipboard, hr %#lx.\n",
hr);
1298 ok(refs > old_refs,
"%ld %ld\n", refs, old_refs);
1302 ok(refs == 2,
"%ld\n", refs);
1306 ok(
hr ==
S_OK,
"Failed to clear clipboard, hr %#lx.\n",
hr);
1311 ok(refs == 2,
"%ld\n", refs);
1313 IDataObject_Release(
src);
1327 IStorage_Release(stg);
1330 ILockBytes_Release(ilb);
1360 hr = IDataObject_GetData(
get, &
fmt, &med);
1362 ok(med.tymed == TYMED_HGLOBAL,
"got %lx\n", med.tymed);
1366 hr = IDataObject_GetData(
get, &
fmt, &med);
1368 ok(med.tymed == TYMED_ISTREAM,
"got %lx\n", med.tymed);
1372 hr = IDataObject_GetData(
get, &
fmt, &med);
1377 hr = IDataObject_GetData(
get, &
fmt, &med);
1379 ok(med.tymed == TYMED_HGLOBAL,
"got %lx\n", med.tymed);
1385 hr = IDataObject_GetData(
get, &
fmt, &med);
1387 ok(med.tymed == TYMED_ISTREAM,
"got %lx\n", med.tymed);
1391 hr = IDataObject_GetData(
get, &
fmt, &med);
1396 hr = IDataObject_GetData(
get, &
fmt, &med);
1398 ok(med.tymed == TYMED_HGLOBAL,
"got %lx\n", med.tymed);
1402 hr = IDataObject_GetData(
get, &
fmt, &med);
1404 ok(med.tymed == TYMED_ISTREAM,
"got %lx\n", med.tymed);
1410 hr = IDataObject_GetData(
get, &
fmt, &med);
1412 ok(med.tymed == TYMED_ISTORAGE,
"got %lx\n", med.tymed);
1414 hr = IStorage_Stat(med.pstg, &
stat, STATFLAG_NONAME);
1421 hr = IDataObject_GetData(
get, &
fmt, &med);
1423 ok(med.tymed == TYMED_ISTREAM,
"got %lx\n", med.tymed);
1427 hr = IDataObject_GetData(
get, &
fmt, &med);
1429 ok(med.tymed == TYMED_HGLOBAL,
"got %lx\n", med.tymed);
1433 hr = IDataObject_GetData(
get, &
fmt, &med);
1435 ok(med.tymed == TYMED_HGLOBAL,
"got %lx\n", med.tymed);
1439 hr = IDataObject_GetData(
get, &
fmt, &med);
1441 ok(med.tymed == TYMED_ISTORAGE,
"got %lx\n", med.tymed);
1447 hr = IDataObject_GetData(
get, &
fmt, &med);
1454 memset(&dm, 0,
sizeof(dm));
1461 fmt.ptd->tdDeviceNameOffset = 0;
1462 fmt.ptd->tdPortNameOffset = 0;
1463 fmt.ptd->tdExtDevmodeOffset =
fmt.ptd->tdDriverNameOffset +
sizeof(
device_name);
1467 hr = IDataObject_GetData(
get, &
fmt, &med);
1469 ok(med.tymed == TYMED_ISTORAGE,
"got %lx\n", med.tymed);
1477 hr = IDataObject_GetData(
get, &
fmt, &med);
1481 IDataObject_Release(
get);
1482 IDataObject_Release(
src);
1493 hr = IDataObject_GetData(
get, &
fmt, &med);
1495 ok(med.tymed == TYMED_ISTORAGE,
"got %lx\n", med.tymed);
1497 IDataObject_Release(
get);
1506 hr = IDataObject_GetData(
get, &
fmt, &med);
1508 ok(med.tymed == TYMED_ISTORAGE,
"got %lx\n", med.tymed);
1512 hr = IDataObject_GetData(
get, &
fmt, &med);
1514 ok(med.tymed == TYMED_HGLOBAL,
"got %lx\n", med.tymed);
1517 IDataObject_Release(
get);
1518 IDataObject_Release(
src);
1534 const RECT rect = {0, 0, 100, 100};
1583 hr = IDataObject_EnumFormatEtc(
get, DATADIR_GET, &enum_fmt);
1586 hr = IEnumFORMATETC_Next(enum_fmt, 1, &
fmt,
NULL);
1588 IEnumFORMATETC_Release(enum_fmt);
1590 IDataObject_Release(
get);
1603 ok(
h == htext,
"got %p\n",
h);
1605 ok(
h == hblob,
"got %p\n",
h);
1609 ok(
h == hstorage,
"got %p\n",
h);
1611 ok(
h == hdrop,
"got %p\n",
h);
1617 hr = IDataObject_EnumFormatEtc(
get, DATADIR_GET, &enum_fmt);
1621 skip(
"EnumFormatEtc failed, skipping tests.\n");
1625 hr = IEnumFORMATETC_Next(enum_fmt, 1, &
fmt,
NULL);
1629 ok(
fmt.dwAspect == DVASPECT_CONTENT,
"aspect %lx\n",
fmt.dwAspect);
1630 ok(
fmt.lindex == -1,
"lindex %ld\n",
fmt.lindex);
1631 ok(
fmt.tymed == (TYMED_ISTREAM | TYMED_HGLOBAL),
"tymed %lx\n",
fmt.tymed);
1633 hr = IEnumFORMATETC_Next(enum_fmt, 1, &
fmt,
NULL);
1637 ok(
fmt.dwAspect == DVASPECT_CONTENT,
"aspect %lx\n",
fmt.dwAspect);
1638 ok(
fmt.lindex == -1,
"lindex %ld\n",
fmt.lindex);
1639 ok(
fmt.tymed == (TYMED_ISTREAM | TYMED_HGLOBAL),
"tymed %lx\n",
fmt.tymed);
1641 hr = IEnumFORMATETC_Next(enum_fmt, 1, &
fmt,
NULL);
1645 ok(
fmt.dwAspect == DVASPECT_CONTENT,
"aspect %lx\n",
fmt.dwAspect);
1646 ok(
fmt.lindex == -1,
"lindex %ld\n",
fmt.lindex);
1647 ok(
fmt.tymed == TYMED_ENHMF,
"tymed %lx\n",
fmt.tymed);
1649 hr = IEnumFORMATETC_Next(enum_fmt, 1, &
fmt,
NULL);
1653 ok(
fmt.dwAspect == DVASPECT_CONTENT,
"aspect %lx\n",
fmt.dwAspect);
1654 ok(
fmt.lindex == -1,
"lindex %ld\n",
fmt.lindex);
1655 ok(
fmt.tymed == (TYMED_ISTREAM | TYMED_HGLOBAL),
"tymed %lx\n",
fmt.tymed);
1657 hr = IEnumFORMATETC_Next(enum_fmt, 1, &
fmt,
NULL);
1661 ok(
fmt.dwAspect == DVASPECT_CONTENT,
"aspect %lx\n",
fmt.dwAspect);
1662 ok(
fmt.lindex == -1,
"lindex %ld\n",
fmt.lindex);
1663 ok(
fmt.tymed == (TYMED_ISTREAM | TYMED_HGLOBAL),
"tymed %lx\n",
fmt.tymed);
1665 hr = IEnumFORMATETC_Next(enum_fmt, 1, &
fmt,
NULL);
1670 ok(
fmt.dwAspect == DVASPECT_CONTENT,
"aspect %lx\n",
fmt.dwAspect);
1671 ok(
fmt.lindex == -1,
"lindex %ld\n",
fmt.lindex);
1672 todo_wine ok(
fmt.tymed == (TYMED_ISTREAM | TYMED_HGLOBAL),
"tymed %lx\n",
fmt.tymed);
1674 hr = IEnumFORMATETC_Next(enum_fmt, 1, &
fmt,
NULL);
1679 ok(
fmt.dwAspect == DVASPECT_CONTENT,
"aspect %lx\n",
fmt.dwAspect);
1680 ok(
fmt.lindex == -1,
"lindex %ld\n",
fmt.lindex);
1681 ok(
fmt.tymed == (TYMED_ISTREAM | TYMED_HGLOBAL),
"tymed %lx\n",
fmt.tymed);
1683 hr = IEnumFORMATETC_Next(enum_fmt, 1, &
fmt,
NULL);
1687 ok(
fmt.dwAspect == DVASPECT_CONTENT,
"aspect %lx\n",
fmt.dwAspect);
1688 ok(
fmt.lindex == -1,
"lindex %ld\n",
fmt.lindex);
1689 ok(
fmt.tymed == (TYMED_ISTREAM | TYMED_HGLOBAL),
"tymed %lx\n",
fmt.tymed);
1691 hr = IEnumFORMATETC_Next(enum_fmt, 1, &
fmt,
NULL);
1695 ok(
fmt.dwAspect == DVASPECT_CONTENT,
"aspect %lx\n",
fmt.dwAspect);
1696 ok(
fmt.lindex == -1,
"lindex %ld\n",
fmt.lindex);
1697 ok(
fmt.tymed == TYMED_MFPICT,
"tymed %lx\n",
fmt.tymed);
1699 hr = IEnumFORMATETC_Next(enum_fmt, 1, &
fmt,
NULL);
1701 IEnumFORMATETC_Release(enum_fmt);
1704 hr = IDataObject_GetData(
get, &
fmt, &med);
1711 hr = IDataObject_GetData(
get, &
fmt, &med);
1713 ok(med.tymed == TYMED_ISTORAGE,
"got %lx\n", med.tymed);
1716 IDataObject_Release(
get);
1753 med.pUnkForRelease =
NULL;
1754 med.tymed = TYMED_HGLOBAL;
1756 hr = IDataObject_GetDataHere(
get, &
fmt, &med);
1758 ok(med.tymed == TYMED_HGLOBAL,
"got %lx\n", med.tymed);
1765 med.pUnkForRelease =
NULL;
1766 med.tymed = TYMED_HGLOBAL;
1768 hr = IDataObject_GetDataHere(
get, &
fmt, &med);
1770 ok(med.tymed == TYMED_HGLOBAL,
"got %lx\n", med.tymed);
1775 med.pUnkForRelease =
NULL;
1776 med.tymed = TYMED_HGLOBAL;
1778 hr = IDataObject_GetDataHere(
get, &
fmt, &med);
1780 ok(med.tymed == TYMED_HGLOBAL,
"got %lx\n", med.tymed);
1785 med.pUnkForRelease =
NULL;
1786 med.tymed = TYMED_ISTREAM;
1788 hr = IDataObject_GetDataHere(
get, &
fmt, &med);
1790 ok(med.tymed == TYMED_ISTREAM,
"got %lx\n", med.tymed);
1795 med.pUnkForRelease =
NULL;
1796 med.tymed = TYMED_ISTORAGE;
1798 hr = IDataObject_GetDataHere(
get, &
fmt, &med);
1800 ok(med.tymed == TYMED_ISTORAGE,
"got %lx\n", med.tymed);
1807 med.pUnkForRelease =
NULL;
1808 med.tymed = TYMED_HGLOBAL;
1810 hr = IDataObject_GetDataHere(
get, &
fmt, &med);
1812 ok(med.tymed == TYMED_HGLOBAL,
"got %lx\n", med.tymed);
1817 med.pUnkForRelease =
NULL;
1818 med.tymed = TYMED_ISTREAM;
1820 hr = IDataObject_GetDataHere(
get, &
fmt, &med);
1822 ok(med.tymed == TYMED_ISTREAM,
"got %lx\n", med.tymed);
1827 med.pUnkForRelease =
NULL;
1828 med.tymed = TYMED_ISTORAGE;
1830 hr = IDataObject_GetDataHere(
get, &
fmt, &med);
1832 ok(med.tymed == TYMED_ISTORAGE,
"got %lx\n", med.tymed);
1839 med.pUnkForRelease =
NULL;
1840 med.tymed = TYMED_HGLOBAL;
1842 hr = IDataObject_GetDataHere(
get, &
fmt, &med);
1844 ok(med.tymed == TYMED_HGLOBAL,
"got %lx\n", med.tymed);
1849 med.pUnkForRelease =
NULL;
1850 med.tymed = TYMED_ISTREAM;
1852 hr = IDataObject_GetDataHere(
get, &
fmt, &med);
1854 ok(med.tymed == TYMED_ISTREAM,
"got %lx\n", med.tymed);
1859 med.pUnkForRelease =
NULL;
1860 med.tymed = TYMED_ISTORAGE;
1862 hr = IDataObject_GetDataHere(
get, &
fmt, &med);
1864 ok(med.tymed == TYMED_ISTORAGE,
"got %lx\n", med.tymed);
1870 IDataObject_Release(
get);
1871 IDataObject_Release(
src);
1881 IDataObject_Release(data_obj);
1895 ok(
hr ==
S_OK,
"OleGetClipboard returned %lx\n",
hr);
1903 ok(
hr ==
S_OK,
"OleGetClipboard returned %lx\n",
hr);
1904 IDataObject_Release(data_obj);
1921 todo_wine ok(pDObj ==
NULL,
"OleGetClipboard() got 0x%p instead of NULL\n",pDObj);
1922 if (pDObj) IDataObject_Release(pDObj);
#define CO_E_NOTINITIALIZED
static POBJECT_TYPE GetObjectType(IN PCWSTR TypeName)
#define InterlockedIncrement
#define InterlockedDecrement
void get(int argc, const char *argv[])
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL delete_on_release, IStream **stream)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP size_t __cdecl strlen(const char *)
HRESULT WINAPI OleIsCurrentClipboard(IDataObject *data)
HRESULT WINAPI OleSetClipboard(IDataObject *data)
static snapshot * impl_from_IDataObject(IDataObject *iface)
static const char * dump_fmtetc(FORMATETC *fmt)
static enum_fmtetc * impl_from_IEnumFORMATETC(IEnumFORMATETC *iface)
HRESULT WINAPI OleFlushClipboard(void)
HRESULT WINAPI OleGetClipboard(IDataObject **obj)
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
HRESULT WINAPI DECLSPEC_HOTPATCH OleInitialize(LPVOID reserved)
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
void WINAPI DECLSPEC_HOTPATCH OleUninitialize(void)
HRESULT WINAPI StgCreateDocfileOnILockBytes(ILockBytes *plkbyt, DWORD grfMode, DWORD reserved, IStorage **ppstgOpen)
HRESULT WINAPI StgCreateDocfile(LPCOLESTR pwcsName, DWORD grfMode, DWORD reserved, IStorage **ppstgOpen)
struct EnumFormatImpl EnumFormatImpl
static ULONG WINAPI EnumFormatImpl_AddRef(IEnumFORMATETC *iface)
static HRESULT WINAPI DataObjectImpl_GetDataHere(IDataObject *iface, FORMATETC *pformatetc, STGMEDIUM *pmedium)
static ULONG WINAPI DataObjectImpl_AddRef(IDataObject *iface)
static HRESULT WINAPI EnumFormatImpl_Skip(IEnumFORMATETC *iface, ULONG celt)
static HRESULT EnumFormatImpl_Create(const FORMATETC *fmtetc, UINT size, LPENUMFORMATETC *lplpformatetc)
static ULONG WINAPI EnumFormatImpl_Release(IEnumFORMATETC *iface)
static const IDataObjectVtbl VT_DataObjectImpl
static HRESULT WINAPI DataObjectImpl_QueryGetData(IDataObject *iface, FORMATETC *pformatetc)
static HRESULT WINAPI EnumFormatImpl_Next(IEnumFORMATETC *iface, ULONG celt, FORMATETC *rgelt, ULONG *pceltFetched)
static HRESULT WINAPI DataObjectImpl_DAdvise(IDataObject *iface, FORMATETC *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection)
static HRESULT WINAPI DataObjectImpl_QueryInterface(IDataObject *iface, REFIID riid, LPVOID *ppvObj)
static HRESULT WINAPI DataObjectImpl_DUnadvise(IDataObject *iface, DWORD dwConnection)
static HRESULT WINAPI DataObjectImpl_EnumFormatEtc(IDataObject *iface, DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc)
static ULONG WINAPI DataObjectImpl_Release(IDataObject *iface)
static HRESULT WINAPI DataObjectImpl_GetData(IDataObject *iface, FORMATETC *pformatetc, STGMEDIUM *pmedium)
static HRESULT WINAPI DataObjectImpl_GetCanonicalFormatEtc(IDataObject *iface, FORMATETC *pformatetcIn, FORMATETC *pformatetcOut)
static HRESULT WINAPI EnumFormatImpl_Clone(IEnumFORMATETC *iface, IEnumFORMATETC **ppenum)
static HRESULT WINAPI DataObjectImpl_EnumDAdvise(IDataObject *iface, IEnumSTATDATA **ppenumAdvise)
static HRESULT WINAPI EnumFormatImpl_QueryInterface(IEnumFORMATETC *iface, REFIID riid, LPVOID *ppvObj)
static HRESULT WINAPI DataObjectImpl_SetData(IDataObject *iface, FORMATETC *pformatetc, STGMEDIUM *pmedium, BOOL fRelease)
static HRESULT WINAPI EnumFormatImpl_Reset(IEnumFORMATETC *iface)
struct DataObjectImpl DataObjectImpl
static const IEnumFORMATETCVtbl VT_EnumFormatImpl
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
#define InitFormatEtc(fe, cf, med)
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLdouble GLdouble GLdouble r
GLenum GLuint GLenum GLsizei const GLchar * buf
GLfloat GLfloat GLfloat GLfloat h
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
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
static ERESOURCE GlobalLock
int WINAPI lstrlenA(LPCSTR lpString)
void *WINAPI CoTaskMemAlloc(SIZE_T size)
void WINAPI CoTaskMemFree(void *ptr)
HRESULT WINAPI GetHGlobalFromILockBytes(ILockBytes *iface, HGLOBAL *phglobal)
HRESULT WINAPI CreateILockBytesOnHGlobal(HGLOBAL global, BOOL delete_on_release, ILockBytes **ret)
#define memcpy(s1, s2, n)
static LPDATAOBJECT clip_data
static HRESULT DataObjectImpl_CreateText(LPCSTR text, LPDATAOBJECT *lplpdataobj)
static UINT wm_drawclipboard
static HGLOBAL create_text(void)
static ULONG DataObjectImpl_GetData_calls
static const char * cmpl_stm_data
static void test_nonole_clipboard(void)
static HMETAFILE create_mf(void)
static void test_cf_dataobject(IDataObject *data)
static HGLOBAL create_storage(void)
static HENHMETAFILE create_emf(void)
static ULONG DataObjectImpl_EnumFormatEtc_calls
static void test_enum_fmtetc(IDataObject *src)
static void test_consumer_refs(void)
static const WCHAR device_name[]
static HRESULT DataObjectImpl_CreateFromHGlobal(HGLOBAL text, LPDATAOBJECT *dataobj)
static BOOL expect_DataObjectImpl_QueryGetData
static DWORD CALLBACK test_data_obj(void *arg)
static const char * cmpl_text_data
static HRESULT DataObjectImpl_CreateComplex(LPDATAOBJECT *lplpdataobj)
static void test_no_cf_dataobject(void)
static void test_getdatahere(void)
static void test_get_clipboard_locked(void)
static void test_complex_get_clipboard(void)
static void test_multithreaded_clipboard(void)
static void test_get_clipboard(void)
static ULONG count_refs(IDataObject *d)
static void test_set_clipboard_DRAWCLIPBOARD(void)
static void test_flushed_getdata(void)
static void test_set_clipboard(void)
static LRESULT CALLBACK clipboard_wnd_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
static DWORD CALLBACK set_clipboard_thread(void *arg)
static void test_get_clipboard_uninitialized(void)
static ULONG DataObjectImpl_GetDataHere_calls
static HMETAFILEPICT create_metafilepict(void)
static HDROP create_dropped_file(void)
#define STGM_SHARE_EXCLUSIVE
#define STGM_DELETEONRELEASE
interface IEnumFORMATETC * LPENUMFORMATETC
interface IDataObject * LPDATAOBJECT
const GUID IID_IEnumFORMATETC
const GUID IID_IDataObject
#define IsEqualGUID(rguid1, rguid2)
struct _DROPFILES DROPFILES
IDataObject IDataObject_iface
WCHAR dmDeviceName[CCHDEVICENAME]
IDataObject IDataObject_iface
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
#define FIELD_OFFSET(t, f)
#define CONTAINING_RECORD(address, type, field)
DWORD WINAPI GetLastError(void)
_In_ FONTOBJ _In_ ULONG _In_ HGLYPH hg
#define CLIPBRD_E_CANT_OPEN
BOOL WINAPI DeleteMetaFile(_In_ HMETAFILE)
HDC WINAPI CreateMetaFileA(_In_opt_ LPCSTR)
HMETAFILE WINAPI CloseMetaFile(_In_ HDC hdc)
BOOL WINAPI ExtTextOutA(_In_ HDC hdc, _In_ int x, _In_ int y, _In_ UINT options, _In_opt_ const RECT *lprect, _In_reads_opt_(c) LPCSTR lpString, _In_ UINT c, _In_reads_opt_(c) const INT *lpDx)
HDC WINAPI CreateEnhMetaFileA(_In_opt_ HDC, _In_opt_ LPCSTR, _In_opt_ LPCRECT, _In_opt_ LPCSTR)
HENHMETAFILE WINAPI CloseEnhMetaFile(_In_ HDC hdc)
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define CreateWindowA(a, b, c, d, e, f, g, h, i, j, k)
HANDLE WINAPI SetClipboardData(_In_ UINT, _In_opt_ HANDLE)
BOOL WINAPI CloseClipboard(void)
HWND WINAPI GetClipboardOwner(void)
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI OpenClipboard(_In_opt_ HWND)
UINT WINAPI EnumClipboardFormats(_In_ UINT)
HANDLE WINAPI GetClipboardData(_In_ UINT)
HWND WINAPI SetClipboardViewer(_In_ HWND)
HWND WINAPI GetDesktopWindow(void)
ATOM WINAPI RegisterClassA(_In_ CONST WNDCLASSA *)
BOOL WINAPI ChangeClipboardChain(_In_ HWND, _In_ HWND)
BOOL WINAPI EmptyClipboard(void)
UINT WINAPI RegisterClipboardFormatA(_In_ LPCSTR)
BOOL WINAPI DestroyWindow(_In_ HWND)