34#define ok_ole_success(hr, func) ok(hr == S_OK, #func " failed with error %#08lx\n", hr)
38 ok_(__FILE__,
line)(!
ref,
"Got outstanding refcount %ld.\n",
ref);
41#define release_iface(a) release_iface_(__LINE__, a)
48static const MYSTRUCT
test_mystruct1 = {0x12345678, 0xdeadbeef98765432ull, {0,1,2,3,4,5,6,7}};
49static const MYSTRUCT
test_mystruct2 = {0x91827364, 0x8877665544332211ull, {3,6,1,4,0,1,3,0}};
50static const MYSTRUCT
test_mystruct3 = {0x1a1b1c1d, 0x1e1f101112131415ull, {9,2,4,5,6,5,1,3}};
51static const MYSTRUCT
test_mystruct4 = {0x2a2b2c2d, 0x2e2f202122232425ull, {0,4,6,7,3,6,7,4}};
52static const MYSTRUCT
test_mystruct5 = {0x3a3b3c3d, 0x3e3f303132333435ull, {1,6,7,3,8,4,6,5}};
53static const MYSTRUCT
test_mystruct6 = {0x4a4b4c4d, 0x4e4f404142434445ull, {3,6,5,3,4,8,0,9}};
54static const MYSTRUCT
test_mystruct7 = {0x5a5b5c5d, 0x5e5f505152535455ull, {1,8,4,4,4,2,3,1}};
73#define RELEASEMARSHALDATA WM_USER
97 if (prev_filter) IMessageFilter_Release(prev_filter);
113 trace(
"releasing marshal data\n");
181 ok(0,
"unexpected call\n");
198 trace(
"add connection\n");
200 ok(extconn == EXTCONN_STRONG,
"extconn = %ld\n", extconn);
208 trace(
"release connection\n");
210 ok(extconn == EXTCONN_STRONG,
"extconn = %ld\n", extconn);
276 ok(0,
"unexpected call\n");
282 ok(0,
"unexpected call\n");
289 ok(0,
"unexpected call\n");
294 WORD wFlags, DISPPARAMS *pDispParams,
VARIANT *pVarResult, EXCEPINFO *pExcepInfo,
297 ok(0,
"unexpected call\n");
303 ok(0,
"unexpected call\n");
335 trace(
"QI external connection\n");
356 ok(0,
"unexpected call\n");
362 ok(0,
"unexpected call\n");
369 ok(0,
"unexpected call\n");
374 WORD wFlags, DISPPARAMS *pDispParams,
VARIANT *pVarResult, EXCEPINFO *pExcepInfo,
377 ok(0,
"unexpected call\n");
410 if (!
obj->support_idispatch)
418 ISomethingFromDispatch_AddRef(iface);
443 ok(0,
"unexpected call\n");
450 ok(
index == 0xdeadbeef,
"Got unexpected index %#x.\n",
index);
457 ok(0,
"unexpected call\n");
464 ok(0,
"unexpected call\n");
491 return &
obj->ISomethingFromDispatch_iface;
525 ICoclass1_AddRef(iface);
530 *
out = &
obj->ICoclass2_iface;
531 ICoclass2_AddRef(*
out);
556 ok(0,
"unexpected call\n");
563 ok(
index == 0xdeadbeef,
"Got unexpected index %#x.\n",
index);
570 ok(0,
"unexpected call\n");
577 ok(0,
"unexpected call\n");
589 return ICoclass1_QueryInterface(&
obj->ICoclass1_iface, iid,
out);
595 return ICoclass1_AddRef(&
obj->ICoclass1_iface);
601 return ICoclass1_Release(&
obj->ICoclass1_iface);
606 ok(0,
"unexpected call\n");
613 ok(
index == 0xdeadbeef,
"Got unexpected index %#x.\n",
index);
620 ok(0,
"unexpected call\n");
627 ok(0,
"unexpected call\n");
690 IWidget_AddRef(iface);
716 IUnknown_Release(
This->pDispatchUnknown);
719 trace(
"Widget destroyed!\n");
734 hr = IDispatch_GetTypeInfoCount(pDispatch, pctinfo);
735 IDispatch_Release(pDispatch);
751 hr = IDispatch_GetTypeInfo(pDispatch, iTInfo,
lcid, ppTInfo);
752 IDispatch_Release(pDispatch);
770 hr = IDispatch_GetIDsOfNames(pDispatch,
riid, rgszNames, cNames,
lcid, rgDispId);
771 IDispatch_Release(pDispatch);
792 hr = IDispatch_Invoke(pDispatch, dispIdMember,
riid,
lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
793 IDispatch_Release(pDispatch);
810 static const WCHAR szCat[] = {
'C',
'a',
't',0 };
811 trace(
"get_Name()\n");
823 static const WCHAR szString[] = {
'S',
't',
'r',
'i',
'n',
'g',0 };
824 trace(
"DoSomething()\n");
828 ok(
V_VT(opt) ==
VT_ERROR,
"V_VT(opt) should be VT_ERROR instead of 0x%x\n",
V_VT(opt));
839 trace(
"get_State() = STATE_WIDGETIFIED\n");
840 *
state = STATE_WIDGETIFIED;
874 trace(
"GetOleColor() = 0x8000000f\n");
891 trace(
"CloneDispatch()\n");
897 ApplicationObject2 **ppVal)
899 trace(
"CloneCoclass()\n");
929 LONG lbound, ubound,
i;
937 "wrong cbElements %lu\n",
values->cbElements );
940 ok(
hr ==
S_OK,
"SafeArrayGetLBound failed with %lx\n",
hr);
941 ok(lbound == 0,
"SafeArrayGetLBound returned %ld\n", lbound);
944 ok(
hr ==
S_OK,
"SafeArrayGetUBound failed with %lx\n",
hr);
945 ok(ubound == numexpect-1,
"SafeArrayGetUBound returned %ld, but expected %d\n", ubound, numexpect-1);
948 ok(
hr ==
S_OK,
"SafeArrayAccessData failed with %lx\n",
hr);
950 for (
i=0;
i<=ubound-lbound;
i++)
957 ok(
hr ==
S_OK,
"SafeArrayUnaccessData failed with %lx\n",
hr);
971 ISomethingFromDispatch **ppVal)
973 trace(
"CloneInterface()\n");
981 trace(
"put_prop_with_lcid(%08lx, %x)\n",
lcid,
i);
983 ok(
i == 0xcafe,
"got %08x\n",
i);
990 trace(
"get_prop_with_lcid(%08lx, %p)\n",
lcid,
i);
997 IWidget* iface,
INT *
i)
999 trace(
"get_prop_int(%p)\n",
i);
1005 IWidget* iface,
UINT *
i)
1007 trace(
"get_prop_uint(%p)\n",
i);
1013 IWidget* iface,
UINT *
i)
1020 IWidget* iface,
INT opt,
INT i)
1022 trace(
"put_prop_opt_arg(%08x, %08x)\n", opt,
i);
1024 ok(
i == 0xcafe,
"got i=%08x\n",
i);
1029 IWidget* iface,
INT req,
INT i)
1031 trace(
"put_prop_req_arg(%08x, %08x)\n", req,
i);
1032 ok(req == 0x5678,
"got req=%08x\n", req);
1033 ok(
i == 0x1234,
"got i=%08x\n",
i);
1039 trace(
"restrict\n");
1046 trace(
"neg_restrict\n");
1054 static const WCHAR catW[] = {
'C',
'a',
't',0 };
1055 static const WCHAR supermanW[] = {
'S',
'u',
'p',
'e',
'r',
'm',
'a',
'n',0 };
1068 ok(
hr ==
S_OK,
"SafeArrayGetUBound error %#lx\n",
hr);
1069 ok(bound == -1,
"expected -1, got %ld\n", bound);
1076 ok(
hr ==
S_OK,
"SafeArrayGetLBound error %#lx\n",
hr);
1077 ok(bound == 0,
"expected 0, got %ld\n", bound);
1080 ok(
hr ==
S_OK,
"SafeArrayGetUBound error %#lx\n",
hr);
1081 ok(bound == 0,
"expected 0, got %ld\n", bound);
1084 ok(
hr ==
S_OK,
"SafeArrayAccessData failed with %lx\n",
hr);
1091 ok(
hr ==
S_OK,
"SafeArrayUnaccessData error %#lx\n",
hr);
1099 static const WCHAR catW[] = {
'C',
'a',
't',0 };
1100 static const WCHAR supermanW[] = {
'S',
'u',
'p',
'e',
'r',
'm',
'a',
'n',0 };
1110 if (!(*params)->cbElements)
1113 ok(
hr ==
S_OK,
"SafeArrayGetUBound error %#lx\n",
hr);
1114 ok(bound == -1,
"expected -1, got %ld\n", bound);
1118 ok( (*params)->cbElements ==
sizeof(
VARIANT),
"wrong cbElements %lu\n", (*params)->cbElements );
1121 ok(
hr ==
S_OK,
"SafeArrayGetLBound error %#lx\n",
hr);
1122 ok(bound == 0,
"expected 0, got %ld\n", bound);
1125 ok(
hr ==
S_OK,
"SafeArrayGetUBound error %#lx\n",
hr);
1126 ok(bound == 0,
"expected 0, got %ld\n", bound);
1129 ok(
hr ==
S_OK,
"SafeArrayAccessData error %#lx\n",
hr);
1136 ok(
hr ==
S_OK,
"SafeArrayUnaccessData error %#lx\n",
hr);
1145 ok(
c == 5,
"Got char %d.\n",
c);
1146 ok(
s == -123,
"Got short %d.\n",
s);
1147 ok(
l == -100000,
"Got int %ld.\n",
l);
1149 ok(uc == 0,
"Got unsigned char %u.\n", uc);
1150 ok(
us == 456,
"Got unsigned short %u.\n",
us);
1151 ok(ul == 0xdeadbeef,
"Got unsigned int %lu.\n", ul);
1153 ok(
f == (
float)
M_PI,
"Got float %f.\n",
f);
1154 ok(
d ==
M_E,
"Got double %f.\n",
d);
1155 ok(st == STATE_WIDGETIFIED,
"Got state %u.\n", st);
1162 float *
f,
double *
d,
STATE *st)
1171 *uh = 0xabcdef0123456789ull;
1174 *st = STATE_UNWIDGETIFIED;
1181 ok(
f == 1.0f,
"Got float %f.\n",
f);
1182 ok(
d == 2.0,
"Got double %f.\n",
d);
1183 ok(
i == 3,
"Got int %d.\n",
i);
1184 ok(
f2 == 4.0f,
"Got float %f.\n",
f2);
1185 ok(d2 == 5.0,
"Got double %f.\n", d2);
1192 ok(*
in == 123,
"Got [in] %ld.\n", *
in);
1194 ok(*
out == 456,
"Got [out] %ld.\n", *
out);
1196 ok(!*
out,
"Got [out] %ld.\n", *
out);
1197 ok(*in_out == 789,
"Got [in, out] %ld.\n", *in_out);
1208 ok(!*
out,
"Got [out] %p.\n", *
out);
1211 ok(!*
in,
"Got [in] %p.\n", *
in);
1212 ok(!*in_out,
"Got [in, out] %p.\n", *in_out);
1216 ok(!*
in,
"Got [in] %p.\n", *
in);
1217 ok(!*in_out,
"Got [in, out] %p.\n", *in_out);
1226 ok(**
in == 123,
"Got [in] %ld.\n", **
in);
1227 ok(**in_out == 789,
"Got [in, out] %ld.\n", **in_out);
1235 ok(**in_out == 789,
"Got [in, out] %ld.\n", **in_out);
1245 ISomethingFromDispatch *sfd2;
1249 hr = IUnknown_QueryInterface(unk, &IID_ISomethingFromDispatch, (
void **)&sfd2);
1251 ISomethingFromDispatch_Release(sfd2);
1253 hr = IDispatch_GetTypeInfo(disp, 0xdeadbeef, 0, &
typeinfo);
1254 ok(
hr == 0xbeefdead,
"Got hr %#lx.\n",
hr);
1256 hr = ISomethingFromDispatch_anotherfn(sfd);
1257 ok(
hr == 0x01234567,
"Got hr %#lx.\n",
hr);
1266 ok(!unk,
"Got iface %p.\n", unk);
1267 ok(!disp,
"Got iface %p.\n", disp);
1268 ok(!sfd,
"Got iface %p.\n", sfd);
1275 ok(!*unk,
"Got iface %p.\n", *unk);
1276 ok(!*disp,
"Got iface %p.\n", *disp);
1277 ok(!*sfd,
"Got iface %p.\n", *sfd);
1289 ISomethingFromDispatch **
out, ISomethingFromDispatch **in_out)
1293 ok(!*
out,
"Got [out] %p.\n", *
out);
1296 hr = ISomethingFromDispatch_anotherfn(*
in);
1297 ok(
hr == 0x01234567,
"Got hr %#lx.\n",
hr);
1298 hr = ISomethingFromDispatch_anotherfn(*in_out);
1299 ok(
hr == 0x01234567,
"Got hr %#lx.\n",
hr);
1305 ISomethingFromDispatch_Release(*in_out);
1310 ok(!*
in,
"Got [in] %p.\n", *
in);
1311 ok(!*in_out,
"Got [in, out] %p.\n", *in_out);
1316 hr = ISomethingFromDispatch_anotherfn(*in_out);
1317 ok(
hr == 0x01234567,
"Got hr %#lx.\n",
hr);
1318 ISomethingFromDispatch_Release(*in_out);
1340 ok(!*
out,
"Got unexpected output %p.\n", *
out);
1349 in[1] = (*in_ptr)[1] = (*in_out)[1] =
'X';
1374 ok(
V_I4(in_ptr) == -1,
"Got wrong value %ld.\n",
V_I4(in_ptr));
1397 for (
i = 0;
i <
len; ++
i)
1417 for (
i = 0;
i <
len; ++
i)
1428 ok(!*
out,
"Got array %p.\n", *
out);
1443 static const MYSTRUCT
empty = {0};
1485 ok(
in.c == 98,
"Got char %d.\n",
in.c);
1486 ok(
in.i == 76543,
"Got int %d.\n",
in.i);
1487 ok(*
in.pi == 2,
"Got int pointer %d.\n", *
in.pi);
1488 ok(**
in.ppi == 10,
"Got int double pointer %d.\n", **
in.ppi);
1489 hr = ISomethingFromDispatch_anotherfn(
in.iface);
1490 ok(
hr == 0x01234567,
"Got wrong hr %#lx.\n",
hr);
1491 hr = ISomethingFromDispatch_anotherfn(*
in.iface_ptr);
1492 ok(
hr == 0x01234567,
"Got wrong hr %#lx.\n",
hr);
1495 ok(
V_I4(&
in.var) == 123,
"Got wrong value %ld.\n",
V_I4(&
in.var));
1498 ok(
in.myint == 456,
"Got int %d.\n",
in.myint);
1505 static const array_t
empty = {0};
1525 ok(
V_VT(&in_out[0]) ==
VT_I4,
"Got wrong type %u.\n",
V_VT(&in_out[0]));
1526 ok(
V_I4(&in_out[0]) == 5,
"Got wrong type %u.\n",
V_VT(&in_out[0]));
1549 ok(
val == 123,
"Got value %d.\n",
val);
1550 ok(*
ptr == 456,
"Got single ptr ref %d.\n", *
ptr);
1551 ok(**ptr_ptr == 789,
"Got double ptr ref %d.\n", **ptr_ptr);
1559 hr = ICoclass1_test((ICoclass1 *)class1);
1560 ok(
hr == 1,
"Got hr %#lx.\n",
hr);
1562 hr = ICoclass2_test((ICoclass2 *)class2);
1563 ok(
hr == 2,
"Got hr %#lx.\n",
hr);
1565 hr = ICoclass1_test((ICoclass1 *)class3);
1566 ok(
hr == 1,
"Got hr %#lx.\n",
hr);
1576 ok(!*
out,
"Got [out] %p.\n", *
out);
1579 hr = ICoclass1_test((ICoclass1 *)*
in);
1580 ok(
hr == 1,
"Got hr %#lx.\n",
hr);
1581 hr = ICoclass1_test((ICoclass1 *)*in_out);
1582 ok(
hr == 1,
"Got hr %#lx.\n",
hr);
1588 *
out = (Coclass1 *)&
obj->ICoclass1_iface;
1590 ICoclass1_Release((ICoclass1 *)*in_out);
1592 *in_out = (Coclass1 *)&
obj->ICoclass1_iface;
1596 ok(!*in_out,
"Got [in, out] %p.\n", *in_out);
1598 *in_out = (Coclass1 *)&
obj->ICoclass1_iface;
1602 hr = ICoclass1_test((ICoclass1 *)*in_out);
1603 ok(
hr == 1,
"Got hr %#lx.\n",
hr);
1604 ICoclass1_Release((ICoclass1 *)*in_out);
1615 hr = ICoclass1_test(class1.iface);
1616 ok(
hr == 1,
"Got hr %#lx.\n",
hr);
1618 hr = ICoclass2_test(class2.iface);
1619 ok(
hr == 2,
"Got hr %#lx.\n",
hr);
1621 hr = ICoclass1_test(class3.iface);
1622 ok(
hr == 1,
"Got hr %#lx.\n",
hr);
1631 ok(
i == 5,
"i = %d\n",
i);
1702 IStaticWidget_AddRef(iface);
1723 ok(0,
"unexpected call\n");
1730 ok(0,
"unexpected call\n");
1737 ok(0,
"unexpected call\n");
1745 ok(0,
"unexpected call\n");
1751 trace(
"TestDual()\n");
1758 trace(
"TestSecondIface()\n");
1818 hr = ITypeLib_GetTypeInfoOfGuid(pTypeLib,
riid, &pTypeInfo);
1819 ITypeLib_Release(pTypeLib);
1843 &
This->pDispatchUnknown);
1845 ITypeInfo_Release(pTypeInfo);
1848 return &
This->IWidget_iface;
1857 IKindaEnumWidget *iface,
1863 IKindaEnumWidget_AddRef(iface);
1875 IKindaEnumWidget *iface)
1883 IKindaEnumWidget *iface)
1891 trace(
"KindaEnumWidget destroyed!\n");
1898 IKindaEnumWidget *iface,
1909 IKindaEnumWidget *iface,
1916 IKindaEnumWidget *iface)
1922 IKindaEnumWidget *iface,
1947 return &
This->IKindaEnumWidget_iface;
1954 *(INonOleAutomation **)
ppv = iface;
1973 static const WCHAR wszTestString[] = {
'T',
'h',
'i',
's',
' ',
'i',
's',
' ',
'a',
' ',
't',
'e',
's',
't',
' ',
's',
't',
'r',
'i',
'n',
'g',0};
2001 hr = ITypeLib_GetTypeInfoOfGuid(pTypeLib, &IID_INonOleAutomation, &pTypeInfo);
2003 ITypeLib_Release(pTypeLib);
2043 hr = IWidget_basetypes_in(widget, 5, -123, -100000, (
LONGLONG)-100000 * 1000000, 0, 456,
2044 0xdeadbeef, (
ULONGLONG)1234567890 * 9876543210,
M_PI,
M_E, STATE_WIDGETIFIED);
2047 c =
s =
l =
h = uc =
us = ul = uh =
f =
d = st = 0;
2063 ok(
c == 10,
"Got char %d.\n",
c);
2064 ok(
s == -321,
"Got short %d.\n",
s);
2065 ok(
l == -200000,
"Got int %ld.\n",
l);
2067 ok(uc == 254,
"Got unsigned char %u.\n", uc);
2068 ok(
us == 256,
"Got unsigned short %u.\n",
us);
2069 ok(ul == 0xf00dfade,
"Got unsigned int %li.\n", ul);
2071 ok(
f == (
float)
M_LN2,
"Got float %f.\n",
f);
2073 ok(st == STATE_UNWIDGETIFIED,
"Got state %u.\n", st);
2075 c =
s =
l =
h = uc =
us = ul = uh =
f =
d = st = 0;
2077 hr = IWidget_basetypes_out(widget, &
c, &
s, &
l, &
h, &uc, &
us, &ul, &uh, &
f, &
d, &st);
2079 ok(
c == 10,
"Got char %d.\n",
c);
2080 ok(
s == -321,
"Got short %d.\n",
s);
2081 ok(
l == -200000,
"Got int %ld.\n",
l);
2083 ok(uc == 254,
"Got unsigned char %u.\n", uc);
2084 ok(
us == 256,
"Got unsigned short %u.\n",
us);
2085 ok(ul == 0xf00dfade,
"Got unsigned int %li.\n", ul);
2087 ok(
f == (
float)
M_LN2,
"Got float %f.\n",
f);
2089 ok(st == STATE_UNWIDGETIFIED,
"Got state %u.\n", st);
2096 hr = IWidget_myint(widget, 123, &
i, &
pi);
2101 hr = IWidget_float_abi(widget, 1.0f, 2.0, 3, 4.0f, 5.0);
2109 LONG in,
out, in_out, *in_ptr, *out_ptr, *in_out_ptr;
2123 ok(
in == 987,
"Got [in] %ld.\n",
in);
2124 ok(
out == 654,
"Got [out] %ld.\n",
out);
2125 ok(in_out == 321,
"Got [in, out] %ld.\n", in_out);
2132 hr = IWidget_long_ptr(widget, &
in, &
out, &in_out);
2134 ok(
in == 123,
"Got [in] %ld.\n",
in);
2135 ok(
out == 654,
"Got [out] %ld.\n",
out);
2136 ok(in_out == 321,
"Got [in, out] %ld.\n", in_out);
2139 hr = IWidget_long_ptr(widget,
NULL, &
out, &in_out);
2141 ok(!
out,
"[out] parameter should have been cleared.\n");
2142 ok(in_out == -1,
"[in, out] parameter should not have been cleared.\n");
2145 hr = IWidget_long_ptr(widget, &
in,
NULL, &in_out);
2147 ok(
in == -1,
"[in] parameter should not have been cleared.\n");
2148 ok(in_out == -1,
"[in, out] parameter should not have been cleared.\n");
2153 ok(
in == -1,
"[in] parameter should not have been cleared.\n");
2154 ok(!
out,
"[out] parameter should have been cleared.\n");
2160 in_ptr = out_ptr = in_out_ptr =
NULL;
2161 hr = IWidget_long_ptr_ptr(widget, &in_ptr, &out_ptr, &in_out_ptr);
2163 ok(!in_ptr,
"Got [in] %p.\n", in_ptr);
2164 ok(!out_ptr,
"Got [out] %p.\n", out_ptr);
2165 ok(!in_out_ptr,
"Got [in, out] %p.\n", in_out_ptr);
2168 hr = IWidget_long_ptr_ptr(widget, &in_ptr, &out_ptr, &in_out_ptr);
2170 ok(*out_ptr == 654,
"Got [out] %ld.\n", *out_ptr);
2171 ok(*in_out_ptr == 321,
"Got [in, out] %ld.\n", *in_out_ptr);
2181 in_out_ptr = &in_out;
2182 hr = IWidget_long_ptr_ptr(widget, &in_ptr, &out_ptr, &in_out_ptr);
2184 ok(out_ptr != &
out,
"[out] ptr should have changed.\n");
2185 ok(in_out_ptr == &in_out,
"[in, out] ptr should not have changed.\n");
2186 ok(*out_ptr == 654,
"Got [out] %ld.\n", *out_ptr);
2187 ok(*in_out_ptr == 321,
"Got [in, out] %ld.\n", *in_out_ptr);
2190 in_ptr = out_ptr =
NULL;
2192 in_out_ptr = &in_out;
2193 hr = IWidget_long_ptr_ptr(widget, &in_ptr, &out_ptr, &in_out_ptr);
2195 ok(!in_out_ptr,
"Got [in, out] %p.\n", in_out_ptr);
2198 in_out_ptr = &in_out;
2199 hr = IWidget_long_ptr_ptr(widget,
NULL, &out_ptr, &in_out_ptr);
2201 ok(!out_ptr,
"[out] parameter should have been cleared.\n");
2202 ok(in_out_ptr == &in_out,
"[in, out] parameter should not have been cleared.\n");
2205 in_out_ptr = &in_out;
2206 hr = IWidget_long_ptr_ptr(widget, &in_ptr,
NULL, &in_out_ptr);
2208 ok(in_ptr == &
in,
"[in] parameter should not have been cleared.\n");
2209 ok(in_out_ptr == &in_out,
"[in, out] parameter should not have been cleared.\n");
2213 hr = IWidget_long_ptr_ptr(widget, &in_ptr, &out_ptr,
NULL);
2215 ok(in_ptr == &
in,
"[in] parameter should not have been cleared.\n");
2216 ok(!out_ptr,
"[out] parameter should have been cleared.\n");
2223 ISomethingFromDispatch *sfd1, *sfd2, *sfd3, *proxy_sfd, *sfd_in, *sfd_out, *sfd_in_out;
2228 ISomethingFromDispatch sfd_noptr;
2235 hr = IWidget_iface_in(widget, (
IUnknown *)sfd1,
2247 proxy_unk = (
IUnknown *)0xdeadbeef;
2249 proxy_sfd = (ISomethingFromDispatch *)0xdeadbeef;
2250 hr = IWidget_iface_out(widget, &proxy_unk, &proxy_disp, &proxy_sfd);
2258 hr = IWidget_iface_out(widget, &proxy_unk, &proxy_disp, &proxy_sfd);
2260 ok(!proxy_unk,
"Got unexpected proxy %p.\n", proxy_unk);
2261 ok(!proxy_disp,
"Got unexpected proxy %p.\n", proxy_disp);
2262 ok(!proxy_sfd,
"Got unexpected proxy %p.\n", proxy_sfd);
2268 hr = IWidget_iface_ptr(widget, &sfd_in, &sfd_out, &sfd_in_out);
2270 ok(sfd_in == sfd1,
"[in] parameter should not have changed.\n");
2271 ok(!sfd_out,
"[out] parameter should have been cleared.\n");
2272 ok(sfd_in_out == sfd3,
"[in, out] parameter should not have changed.\n");
2280 ISomethingFromDispatch_AddRef(sfd_in_out);
2281 hr = IWidget_iface_ptr(widget, &sfd_in, &sfd_out, &sfd_in_out);
2283 hr = ISomethingFromDispatch_anotherfn(sfd_out);
2284 ok(
hr == 0x01234567,
"Got hr %#lx.\n",
hr);
2285 ok(sfd_in_out != sfd3,
"[in, out] parameter should have changed.\n");
2286 hr = ISomethingFromDispatch_anotherfn(sfd_in_out);
2287 ok(
hr == 0x01234567,
"Got hr %#lx.\n",
hr);
2294 sfd_in = sfd_out = sfd_in_out =
NULL;
2295 hr = IWidget_iface_ptr(widget, &sfd_in, &sfd_out, &sfd_in_out);
2297 ok(!sfd_out,
"[out] parameter should not have been set.\n");
2298 hr = ISomethingFromDispatch_anotherfn(sfd_in_out);
2299 ok(
hr == 0x01234567,
"Got hr %#lx.\n",
hr);
2303 sfd_in = sfd_out =
NULL;
2305 ISomethingFromDispatch_AddRef(sfd_in_out);
2306 hr = IWidget_iface_ptr(widget, &sfd_in, &sfd_out, &sfd_in_out);
2308 ok(!sfd_in_out,
"Got [in, out] %p.\n", sfd_in_out);
2314 unk_noptr.lpVtbl = (IUnknownVtbl *)sfd1;
2315 disp_noptr.lpVtbl = (IDispatchVtbl *)sfd2;
2316 sfd_noptr.lpVtbl = (ISomethingFromDispatchVtbl *)sfd3;
2317 hr = IWidget_iface_noptr(widget, unk_noptr, disp_noptr, sfd_noptr);
2358 proxy_unk = proxy_unk2 =
NULL;
2368 hr = IUnknown_QueryInterface(proxy_unk2, &IID_ISomethingFromDispatch, (
void **)&proxy_sfd);
2371 ISomethingFromDispatch_Release(proxy_sfd);
2378 proxy_unk = proxy_unk2 =
NULL;
2384 ok(!proxy_unk,
"Got unexpected proxy %p.\n", proxy_unk);
2385 ok(!proxy_disp,
"Got unexpected proxy %p.\n", proxy_disp);
2386 ok(!proxy_unk2,
"Got unexpected proxy %p.\n", proxy_unk2);
2401 ok(
unk_in == (
IUnknown *)sfd1,
"[in] parameter should not have changed.\n");
2402 ok(!
unk_out,
"[out] parameter should have been cleared.\n");
2403 ok(unk_in_out == (
IUnknown *)sfd3,
"[in, out] parameter should not have changed.\n");
2413 IUnknown_AddRef(unk_in_out);
2420 hr = IUnknown_QueryInterface(
unk_out, &IID_ISomethingFromDispatch, (
void **)&sfd_out);
2422 hr = ISomethingFromDispatch_anotherfn(sfd_out);
2423 ok(
hr == 0x01234567,
"Got hr %#lx.\n",
hr);
2424 ISomethingFromDispatch_Release(sfd_out);
2426 ok(unk_in_out != (
IUnknown *)sfd3,
"[in, out] parameter should have changed.\n");
2427 hr = IUnknown_QueryInterface(unk_in_out, &IID_ISomethingFromDispatch, (
void **)&sfd_in_out);
2429 hr = ISomethingFromDispatch_anotherfn(sfd_in_out);
2430 ok(
hr == 0x01234567,
"Got hr %#lx.\n",
hr);
2431 ISomethingFromDispatch_Release(sfd_in_out);
2447 ok(!
unk_out,
"[out] parameter should not have been set.\n");
2449 hr = IUnknown_QueryInterface(unk_in_out, &IID_ISomethingFromDispatch, (
void **)&sfd_in_out);
2451 hr = ISomethingFromDispatch_anotherfn(sfd_in_out);
2452 ok(
hr == 0x01234567,
"Got hr %#lx.\n",
hr);
2453 ISomethingFromDispatch_Release(sfd_in_out);
2462 IUnknown_AddRef(unk_in_out);
2467 ok(!unk_in_out,
"[in, out] parameter should have been cleared.\n");
2493 ok(
in[1] ==
test_bstr1[1],
"[in] parameter should not be changed.\n");
2494 ok(in_ptr[1] ==
'X',
"[in] pointer should be changed.\n");
2495 ok(in_out[1] ==
'X',
"[in, out] parameter should be changed.\n");
2505 hr = IWidget_bstr(widget,
in, &
out, &in_ptr, &in_out);
2507 ok(
in[1] ==
test_bstr1[1],
"[in] parameter should not be changed.\n");
2508 ok(in_ptr[1] ==
test_bstr2[1],
"[in] pointer should not be changed.\n");
2509 ok(in_out[1] ==
'X',
"[in, out] parameter should be changed.\n");
2520 hr = IWidget_bstr(widget,
NULL, &
out, &in_ptr, &in_out);
2524 hr = IWidget_no_in_out(widget,
in, 5);
2546 V_CY(&
arg[3]).Lo = 0xdeadbeef;
2558 ok(
V_I2(&in_ptr) == 4,
"Got wrong value %d.\n",
V_I1(&in_ptr));
2560 ok(
V_I1(&in_out) == 5,
"Got wrong value %d.\n",
V_I1(&in_out));
2569 hr = IWidget_variant(widget,
arg[3], &
out, &in_ptr, &in_out);
2575 ok(
V_I2(&in_ptr) == -1,
"Got wrong value %d.\n",
V_I1(&in_ptr));
2577 ok(
V_I1(&in_out) == 5,
"Got wrong value %d.\n",
V_I1(&in_out));
2589 hr = IWidget_safearray(widget,
in, &
out, &in_ptr, &in_out);
2606 MYSTRUCT
out, in_ptr, in_out, *in_ptr_ptr;
2607 RECT rect_out, rect_in_ptr, rect_in_out;
2608 ISomethingFromDispatch *sfd;
2610 int i, i2, *
pi = &i2;
2623 in_ptr_ptr = &in_ptr;
2624 hr = IWidget_mystruct_ptr_ptr(widget, &in_ptr_ptr);
2637 hr = IWidget_rect(widget,
test_rect1, &rect_out, &rect_in_ptr, &rect_in_out);
2659 hr = IWidget_complex_struct(widget,
complex);
2665 VARIANT var_in[2], var_out[2], var_in_out[2];
2666 ISomethingFromDispatch *proxy_sfd;
2667 array_t
in,
out, in_out;
2668 MYSTRUCT struct_in[2];
2675 hr = IWidget_array(widget,
in,
out, in_out);
2687 hr = IWidget_variant_array(widget, var_in, var_out, var_in_out);
2689 ok(
V_VT(&var_in[0]) ==
VT_I4,
"Got wrong type %u.\n",
V_VT(&var_in[0]));
2690 ok(
V_I4(&var_in[0]) == 1,
"Got wrong value %ld.\n",
V_I4(&var_in[0]));
2693 ok(
l == 2,
"Got wrong value %ld.\n",
l);
2694 ok(
V_VT(&var_out[0]) ==
VT_I1,
"Got wrong type %u.\n",
V_VT(&var_out[0]));
2695 ok(
V_I1(&var_out[0]) == 9,
"Got wrong value %u.\n",
V_VT(&var_out[0]));
2698 ok(
V_VT(&var_in_out[0]) ==
VT_I1,
"Got wrong type %u.\n",
V_VT(&var_in_out[0]));
2699 ok(
V_I1(&var_in_out[0]) == 11,
"Got wrong value %u.\n",
V_VT(&var_in_out[0]));
2701 hr = IUnknown_QueryInterface(
V_UNKNOWN(&var_in_out[1]), &IID_ISomethingFromDispatch, (
void **)&proxy_sfd);
2703 hr = ISomethingFromDispatch_anotherfn(proxy_sfd);
2704 ok(
hr == 0x01234567,
"Got hr %#lx.\n",
hr);
2705 ISomethingFromDispatch_Release(proxy_sfd);
2710 hr = IWidget_mystruct_array(widget, struct_in);
2720 ICoclass1 *
in, *
out, *in_out;
2721 Coclass1 class1_noptr;
2722 Coclass2 class2_noptr;
2723 Coclass3 class3_noptr;
2749 hr = IWidget_Coclass_ptr(widget, (Coclass1 **)&
in, (Coclass1 **)&
out, (Coclass1 **)&in_out);
2752 ok(!
out,
"[out] parameter should have been cleared.\n");
2753 ok(in_out == &class3->
ICoclass1_iface,
"[in, out] parameter should not have changed.\n");
2763 ICoclass1_AddRef(in_out);
2764 hr = IWidget_Coclass_ptr(widget, (Coclass1 **)&
in,
2765 (Coclass1 **)&
out, (Coclass1 **)&in_out);
2767 hr = ICoclass1_test(
out);
2768 ok(
hr == 1,
"Got hr %#lx.\n",
hr);
2769 ok(in_out != &class3->
ICoclass1_iface,
"[in, out] parameter should have changed.\n");
2770 hr = ICoclass1_test(in_out);
2771 ok(
hr == 1,
"Got hr %#lx.\n",
hr);
2779 hr = IWidget_Coclass_ptr(widget, (Coclass1 **)&
in,
2780 (Coclass1 **)&
out, (Coclass1 **)&in_out);
2782 hr = ICoclass1_test(in_out);
2783 ok(
hr == 1,
"Got hr %#lx.\n",
hr);
2790 hr = IWidget_Coclass_ptr(widget, (Coclass1 **)&
in,
2791 (Coclass1 **)&
out, (Coclass1 **)&in_out);
2793 ok(!in_out,
"Got [in, out] %p.\n", in_out);
2801 hr = IWidget_Coclass_noptr(widget, class1_noptr, class2_noptr, class3_noptr);
2853 ok(!
unk_out,
"[out] parameter should have been cleared.\n");
2864 IUnknown_AddRef(unk_in_out);
2871 hr = IUnknown_QueryInterface(
unk_out, &IID_ICoclass1, (
void **)&
out);
2873 hr = ICoclass1_test(
out);
2874 ok(
hr == 1,
"Got hr %#lx.\n",
hr);
2875 ICoclass1_Release(
out);
2878 hr = IUnknown_QueryInterface(unk_in_out, &IID_ICoclass1, (
void **)&in_out);
2880 hr = ICoclass1_test(in_out);
2881 ok(
hr == 1,
"Got hr %#lx.\n",
hr);
2882 ICoclass1_Release(in_out);
2898 ok(!
unk_out,
"[out] parameter should not have been set.\n");
2900 hr = IUnknown_QueryInterface(unk_in_out, &IID_ICoclass1, (
void **)&in_out);
2902 hr = ICoclass1_test(in_out);
2903 ok(
hr == 1,
"Got hr %#lx.\n",
hr);
2904 ICoclass1_Release(in_out);
2913 IUnknown_AddRef(unk_in_out);
2919 ok(!unk_in_out,
"[in, out] parameter should have been cleared.\n");
2927 static const WCHAR szCat[] = {
'C',
'a',
't',0 };
2928 static const WCHAR szTestTest[] = {
'T',
'e',
's',
't',
'T',
'e',
's',
't',0 };
2929 static const WCHAR szSuperman[] = {
'S',
'u',
'p',
'e',
'r',
'm',
'a',
'n',0 };
2938 DISPID dispidNamed = DISPID_PROPERTYPUT;
2939 DISPPARAMS dispparams;
2948 ok(pKEW !=
NULL,
"Widget creation failed\n");
2953 IKindaEnumWidget_Release(pKEW);
2955 IStream_Seek(pStream,
ullZero, STREAM_SEEK_SET,
NULL);
2958 IStream_Release(pStream);
2965 hr = IKindaEnumWidget_Next(pKEW, &pWidget);
2968 IKindaEnumWidget_Release(pKEW);
2971 hr = IWidget_GetTypeInfoCount(pWidget, &uval);
2973 hr = IWidget_GetTypeInfoCount(pWidget, &uval);
2976 hr = IWidget_QueryInterface(pWidget, &
IID_IDispatch, (
void **)&pDispatch);
2981 dispparams.cNamedArgs = 1;
2982 dispparams.rgdispidNamedArgs = &dispidNamed;
2983 dispparams.cArgs = 1;
2984 dispparams.rgvarg = vararg;
2989 "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08lx\n",
2995 hr = IWidget_put_Name(pWidget, bstr);
3000 dispparams.cNamedArgs = 0;
3001 dispparams.rgdispidNamedArgs =
NULL;
3002 dispparams.cArgs = 0;
3003 dispparams.rgvarg =
NULL;
3008 "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08lx\n",
3014 bstr = (
void *)0xdeadbeef;
3015 hr = IWidget_get_Name(pWidget, &bstr);
3017 ok(!
lstrcmpW(bstr, szCat),
"IWidget_get_Name should have returned string \"Cat\" instead of %s\n",
wine_dbgstr_w(bstr));
3024 V_R8(&vararg[1]) = 3.141;
3025 dispparams.cNamedArgs = 0;
3026 dispparams.cArgs = 2;
3027 dispparams.rgdispidNamedArgs =
NULL;
3028 dispparams.rgvarg = vararg;
3032 ok(
V_VT(&varresult) ==
VT_EMPTY,
"varresult should be VT_EMPTY\n");
3040 V_R8(&vararg[2]) = 3.141;
3041 dispparams.cNamedArgs = 0;
3042 dispparams.cArgs = 3;
3043 dispparams.rgdispidNamedArgs =
NULL;
3044 dispparams.rgvarg = vararg;
3048 ok(
V_VT(&varresult) ==
VT_EMPTY,
"varresult should be VT_EMPTY\n");
3057 V_R8(&vararg[3]) = 3.141;
3062 dispparams.cNamedArgs = 0;
3063 dispparams.cArgs = 4;
3064 dispparams.rgdispidNamedArgs =
NULL;
3065 dispparams.rgvarg = vararg;
3069 ok(
V_VT(&varresult) ==
VT_EMPTY,
"varresult should be VT_EMPTY\n");
3073 dispparams.cNamedArgs = 0;
3074 dispparams.cArgs = 0;
3075 dispparams.rgdispidNamedArgs =
NULL;
3076 dispparams.rgvarg =
NULL;
3079 ok((
V_VT(&varresult) ==
VT_I4) && (
V_I4(&varresult) == STATE_WIDGETIFIED),
"Return val mismatch\n");
3082 hr = IWidget_get_State(pWidget, &the_state);
3084 ok(the_state == STATE_WIDGETIFIED,
"should have returned WIDGET_WIDGETIFIED instead of %d\n", the_state);
3087 the_state = STATE_WIDGETIFIED;
3091 dispparams.cNamedArgs = 1;
3092 dispparams.cArgs = 1;
3093 dispparams.rgdispidNamedArgs = &dispidNamed;
3094 dispparams.rgvarg = vararg;
3103 dispparams.cNamedArgs = 0;
3104 dispparams.cArgs = 1;
3105 dispparams.rgdispidNamedArgs =
NULL;
3106 dispparams.rgvarg = vararg;
3110 ok(
V_VT(&varresult) ==
VT_BSTR,
"Return value should be of type BSTR instead of %d\n",
V_VT(&varresult));
3118 V_I4(&vararg[0]) = 0x80000005;
3119 dispparams.cNamedArgs = 0;
3120 dispparams.cArgs = 1;
3121 dispparams.rgdispidNamedArgs =
NULL;
3122 dispparams.rgvarg = vararg;
3127 dispparams.cNamedArgs = 0;
3128 dispparams.cArgs = 0;
3129 dispparams.rgdispidNamedArgs =
NULL;
3130 dispparams.rgvarg =
NULL;
3137 dispparams.cNamedArgs = 0;
3138 dispparams.cArgs = 0;
3139 dispparams.rgdispidNamedArgs =
NULL;
3140 dispparams.rgvarg =
NULL;
3148 dispparams.cNamedArgs = 0;
3149 dispparams.cArgs = 0;
3150 dispparams.rgdispidNamedArgs =
NULL;
3151 dispparams.rgvarg =
NULL;
3160 V_I2(&vararg[0]) = 1;
3161 dispparams.cNamedArgs = 0;
3162 dispparams.rgdispidNamedArgs =
NULL;
3163 dispparams.cArgs = 1;
3164 dispparams.rgvarg = vararg;
3170 "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08lx\n",
3173 ok(
V_VT(&varresult) ==
VT_I2,
"V_VT(&varresult) was %d instead of VT_I2\n",
V_VT(&varresult));
3174 ok(
V_I2(&varresult) == 1234,
"V_I2(&varresult) was %d instead of 1234\n",
V_I2(&varresult));
3178 dispparams.cNamedArgs = 0;
3179 dispparams.cArgs = 0;
3180 dispparams.rgdispidNamedArgs =
NULL;
3181 dispparams.rgvarg =
NULL;
3187 "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08lx\n",
3190 ok(
V_VT(&varresult) ==
VT_DISPATCH,
"V_VT(&varresult) was %d instead of VT_DISPATCH\n",
V_VT(&varresult));
3191 ok(
V_DISPATCH(&varresult) !=
NULL,
"expected V_DISPATCH(&varresult) != NULL\n");
3197 V_I2(&vararg[1]) = 1;
3198 dispparams.cNamedArgs = 0;
3199 dispparams.rgdispidNamedArgs =
NULL;
3200 dispparams.cArgs = 1;
3201 dispparams.rgvarg = vararg;
3207 "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08lx\n",
3210 ok(
V_VT(&varresult) ==
VT_I2,
"V_VT(&varresult) was %d instead of VT_I2\n",
V_VT(&varresult));
3211 ok(
V_I2(&varresult) == 1234,
"V_I2(&varresult) was %d instead of 1234\n",
V_I2(&varresult));
3218 dispparams.cNamedArgs = 0;
3219 dispparams.cArgs = 1;
3220 dispparams.rgdispidNamedArgs =
NULL;
3221 dispparams.rgvarg = vararg;
3230 dispparams.cNamedArgs = 0;
3231 dispparams.cArgs = 1;
3232 dispparams.rgdispidNamedArgs =
NULL;
3233 dispparams.rgvarg = vararg;
3241 V_I4(&vararg[3]) = 3;
3244 V_I4(&vararg[2]) = 0;
3247 V_I4(&vararg[1]) = 1;
3250 V_I4(&vararg[0]) = 2;
3251 dispparams.cNamedArgs = 0;
3252 dispparams.cArgs = 4;
3253 dispparams.rgdispidNamedArgs =
NULL;
3254 dispparams.rgvarg = vararg;
3259 dispparams.cArgs = 1;
3260 V_I4(&vararg[0]) = 0;
3266 dispparams.cNamedArgs = 1;
3267 dispparams.rgdispidNamedArgs = &dispidNamed;
3270 dispidNamed = DISPID_PROPERTYPUT;
3279 dispparams.cNamedArgs = 0;
3280 dispparams.cArgs = 2;
3281 dispparams.rgdispidNamedArgs =
NULL;
3282 dispparams.rgvarg = vararg;
3286 dispparams.cArgs = 1;
3287 dispparams.rgvarg = vararg + 1;
3300 dispparams.cNamedArgs = 0;
3301 dispparams.cArgs = 2;
3302 dispparams.rgdispidNamedArgs =
NULL;
3303 dispparams.rgvarg = vararg;
3307 dispparams.cArgs = 1;
3308 dispparams.rgvarg = vararg + 1;
3315 dispparams.cNamedArgs = 0;
3316 dispparams.cArgs = 0;
3317 dispparams.rgdispidNamedArgs =
NULL;
3318 dispparams.rgvarg =
NULL;
3321 ok(
hr ==
DISP_E_EXCEPTION,
"IDispatch_Invoke should have returned DISP_E_EXCEPTION instead of 0x%08lx\n",
hr);
3323 "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08lx\n",
3329 dispparams.cNamedArgs = 0;
3330 dispparams.cArgs = 0;
3331 dispparams.rgdispidNamedArgs =
NULL;
3332 dispparams.rgvarg =
NULL;
3336 ok(
V_VT(&varresult) ==
VT_BSTR,
"V_VT(&varresult) should be VT_BSTR instead of %d\n",
V_VT(&varresult));
3337 ok(
V_BSTR(&varresult) !=
NULL,
"V_BSTR(&varresult) should not be NULL\n");
3341 dispparams.cNamedArgs = 0;
3342 dispparams.cArgs = 0;
3343 dispparams.rgdispidNamedArgs =
NULL;
3344 dispparams.rgvarg =
NULL;
3346 ok(
hr ==
DISP_E_EXCEPTION,
"ITypeInfo_Invoke should have returned DISP_E_EXCEPTION instead of 0x%08lx\n",
hr);
3347 ok(
V_VT(&varresult) ==
VT_EMPTY,
"V_VT(&varresult) should be VT_EMPTY instead of %d\n",
V_VT(&varresult));
3349 "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08lx\n",
3353 ITypeInfo_Release(pTypeInfo);
3357 dispparams.cNamedArgs = 0;
3358 dispparams.rgdispidNamedArgs =
NULL;
3359 dispparams.cArgs = 1;
3360 dispparams.rgvarg = vararg;
3370 dispparams.cNamedArgs = 1;
3371 dispparams.rgdispidNamedArgs = &dispidNamed;
3372 dispparams.cArgs = 1;
3373 dispparams.rgvarg = vararg;
3383 dispparams.cNamedArgs = 1;
3384 dispparams.rgdispidNamedArgs = &dispidNamed;
3385 dispparams.cArgs = 1;
3386 dispparams.rgvarg = vararg;
3389 ok(
hr ==
DISP_E_BADVARTYPE,
"IDispatch_Invoke should have returned DISP_E_BADVARTYPE instead of 0x%08lx\n",
hr);
3393 dispparams.cNamedArgs = 0;
3394 dispparams.rgdispidNamedArgs =
NULL;
3395 dispparams.cArgs = 0;
3396 dispparams.rgvarg =
NULL;
3407 V_I4(&vararg[1]) = 1;
3408 dispparams.cNamedArgs = 0;
3409 dispparams.cArgs = 2;
3410 dispparams.rgdispidNamedArgs =
NULL;
3411 dispparams.rgvarg = vararg;
3421 V_I4(&vararg[0]) = 0xcafe;
3422 dispparams.cNamedArgs = 1;
3423 dispparams.rgdispidNamedArgs = &dispidNamed;
3424 dispparams.cArgs = 1;
3425 dispparams.rgvarg = vararg;
3432 dispparams.cNamedArgs = 0;
3433 dispparams.cArgs = 0;
3434 dispparams.rgvarg =
NULL;
3435 dispparams.rgdispidNamedArgs =
NULL;
3439 ok(
V_I4(&varresult) == 0x409,
"got %lx\n",
V_I4(&varresult));
3443 dispparams.cNamedArgs = 0;
3444 dispparams.cArgs = 0;
3445 dispparams.rgvarg =
NULL;
3446 dispparams.rgdispidNamedArgs =
NULL;
3450 ok(
V_I4(&varresult) == -13,
"got %lx\n",
V_I4(&varresult));
3454 dispparams.cNamedArgs = 0;
3455 dispparams.cArgs = 0;
3456 dispparams.rgvarg =
NULL;
3457 dispparams.rgdispidNamedArgs =
NULL;
3461 ok(
V_UI4(&varresult) == 42,
"got %lx\n",
V_UI4(&varresult));
3469 dispparams.cNamedArgs = 0;
3470 dispparams.cArgs = 1;
3471 dispparams.rgvarg = vararg;
3472 dispparams.rgdispidNamedArgs =
NULL;
3475 ok(
V_VT(&varresult) ==
VT_EMPTY,
"varresult should be VT_EMPTY\n");
3477 ok(
V_UI4REF(&vararg[0]) == (
ULONG *)&uval,
"Byref pointer not preserved: %p/%p\n", &uval,
V_UI4REF(&vararg[0]));
3478 ok(*
V_UI4REF(&vararg[0]) == 42,
"Expected 42 to be returned instead of %lu\n", *
V_UI4REF(&vararg[0]));
3485 V_I4(&vararg[0]) = 0xcafe;
3486 dispparams.cNamedArgs = 1;
3487 dispparams.rgdispidNamedArgs = &dispidNamed;
3488 dispparams.cArgs = 1;
3489 dispparams.rgvarg = vararg;
3499 V_I4(&vararg[0]) = 0x1234;
3501 V_I4(&vararg[1]) = 0x5678;
3502 dispparams.cNamedArgs = 1;
3503 dispparams.rgdispidNamedArgs = &dispidNamed;
3504 dispparams.cArgs = 2;
3505 dispparams.rgvarg = vararg;
3512 dispparams.cNamedArgs = 0;
3513 dispparams.rgdispidNamedArgs =
NULL;
3514 dispparams.cArgs = 0;
3515 dispparams.rgvarg =
NULL;
3522 dispparams.cNamedArgs = 0;
3523 dispparams.rgdispidNamedArgs =
NULL;
3524 dispparams.cArgs = 0;
3525 dispparams.rgvarg =
NULL;
3543 IDispatch_Release(pDispatch);
3544 IWidget_Release(pWidget);
3546 trace(
"calling end_host_object\n");
3556 VARIANTARG *rgpvarg[4] = { &vararg[0], &vararg[1], &vararg[2], &vararg[3] };
3561 V_R8(&vararg[0]) = 3.141;
3577 IWidget_Release(pWidget);
3583 DISPPARAMS dispparams;
3592 dispparams.cNamedArgs = 0;
3593 dispparams.cArgs = 1;
3594 dispparams.rgdispidNamedArgs =
NULL;
3595 dispparams.rgvarg = vararg;
3606 dispparams.cNamedArgs = 0;
3607 dispparams.cArgs = 1;
3608 dispparams.rgdispidNamedArgs =
NULL;
3609 dispparams.rgvarg = vararg;
3633 hr = ITypeLib_GetLibAttr(pTypeLib, &pattr);
3639 ITypeLib_ReleaseTLibAttr(pTypeLib, pattr);
3642 ITypeLib_Release(pTypeLib);
3648 ITestSecondDisp *second;
3656 trace(
"Testing IExternalConnection...\n");
3682 hres = ItestDual_QueryInterface(iface, &IID_ITestSecondDisp, (
void**)&second);
3683 ok(
hres ==
S_OK,
"Could not get ITestSecondDisp iface: %08lx\n",
hres);
3687 ITestSecondDisp_Release(second);
3692 ItestDual_Release(iface);
3732 IStream_Seek(stream2,
zero, STREAM_SEEK_SET,
NULL);
3738 IStream_Release(stream2);
3752 ItestDual_Release(iface);
3781 hr = IDispatch_GetTypeInfo(proxy_disp, 0xdeadbeef, 0, &
typeinfo);
3782 ok(
hr == 0xbeefdead,
"Got hr %#lx.\n",
hr);
3784 ref = IDispatch_Release(proxy_disp);
3785 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
3787 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
3790 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
3803 win_skip(
"Registration of the test typelib failed, skipping tests\n");
static struct sockaddr_in sa
#define InterlockedIncrement
#define InterlockedDecrement
struct __type_info type_info
static const WCHAR szEmpty[]
HRESULT WINAPI CoRegisterMessageFilter(IMessageFilter *filter, IMessageFilter **ret_filter)
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(void *reserved, DWORD model)
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL delete_on_release, IStream **stream)
void *WINAPI CoTaskMemAlloc(SIZE_T size)
void WINAPI CoTaskMemFree(void *ptr)
HRESULT WINAPI CoMarshalInterface(IStream *stream, REFIID riid, IUnknown *unk, DWORD dest_context, void *pvDestContext, DWORD mshlFlags)
HRESULT WINAPI CoReleaseMarshalData(IStream *stream)
HRESULT WINAPI CoUnmarshalInterface(IStream *stream, REFIID riid, void **ppv)
static const WCHAR empty[1]
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
#define HeapFree(x, y, z)
#define MultiByteToWideChar
DWORD WINAPI GetModuleFileNameA(HINSTANCE hModule, LPSTR lpFilename, DWORD nSize)
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)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
HRESULT WINAPI CreateStdDispatch(IUnknown *punkOuter, void *pvThis, ITypeInfo *ptinfo, IUnknown **stddisp)
HRESULT WINAPI SafeArrayGetUBound(SAFEARRAY *psa, UINT nDim, LONG *plUbound)
HRESULT WINAPI SafeArrayAccessData(SAFEARRAY *psa, void **ppvData)
HRESULT WINAPI SafeArrayUnaccessData(SAFEARRAY *psa)
SAFEARRAY *WINAPI SafeArrayCreateVector(VARTYPE vt, LONG lLbound, ULONG cElements)
HRESULT WINAPI SafeArrayGetLBound(SAFEARRAY *psa, UINT nDim, LONG *plLbound)
HRESULT WINAPI SafeArrayDestroy(SAFEARRAY *psa)
HRESULT WINAPI LoadRegTypeLib(REFGUID rguid, WORD wVerMajor, WORD wVerMinor, LCID lcid, ITypeLib **ppTLib)
HRESULT WINAPI RegisterTypeLib(ITypeLib *ptlib, const WCHAR *szFullPath, const WCHAR *szHelpDir)
HRESULT WINAPI DispCallFunc(void *pvInstance, ULONG_PTR oVft, CALLCONV cc, VARTYPE vtReturn, UINT cActuals, VARTYPE *prgvt, VARIANTARG **prgpvarg, VARIANT *pvargResult)
HRESULT WINAPI UnRegisterTypeLib(REFGUID libid, WORD wVerMajor, WORD wVerMinor, LCID lcid, SYSKIND syskind)
HRESULT WINAPI LoadTypeLib(const OLECHAR *szFile, ITypeLib **pptLib)
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum const GLfloat * params
GLboolean GLenum GLenum GLvoid * values
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
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
#define memcpy(s1, s2, n)
static unsigned int number
static PROCESS_INFORMATION pi
static const LARGE_INTEGER ullZero
static EXCEPINFO excepinfo
static void release_host_object(DWORD tid, WPARAM wp)
static VARIANTARG static DISPID
@ COINIT_APARTMENTTHREADED
UINT WINAPI SysStringByteLen(BSTR str)
BSTR WINAPI SysAllocString(LPCOLESTR str)
UINT WINAPI SysStringLen(BSTR str)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
#define DISPATCH_PROPERTYPUT
#define DISPATCH_PROPERTYGET
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
#define SUBLANG_ENGLISH_US
XML_HIDDEN void xmlParserErrors const char const xmlChar const xmlChar * str2
XML_HIDDEN void xmlParserErrors const char const xmlChar * str1
IKindaEnumWidget IKindaEnumWidget_iface
ICoclass1 ICoclass1_iface
ICoclass2 ICoclass2_iface
ISomethingFromDispatch ISomethingFromDispatch_iface
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventA(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCSTR lpName OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
static HRESULT WINAPI Widget_complex_struct(IWidget *iface, struct complex in)
static const IStaticWidgetVtbl StaticWidgetVtbl
static void test_marshal_struct(IWidget *widget, IDispatch *disp)
static HRESULT WINAPI Widget_get_Name(IWidget __RPC_FAR *iface, BSTR __RPC_FAR *name)
static HRESULT WINAPI coclass2_GetTypeInfo(ICoclass2 *iface, UINT index, LCID lcid, ITypeInfo **typeinfo)
static HRESULT WINAPI NonOleAutomation_QueryInterface(INonOleAutomation *iface, REFIID riid, void **ppv)
static HRESULT WINAPI TestDual_QueryInterface(ItestDual *iface, REFIID riid, void **ppvObject)
static IKindaEnumWidget * KindaEnumWidget_Create(void)
static HRESULT WINAPI Widget_CloneCoclass(IWidget *iface, ApplicationObject2 **ppVal)
static HRESULT WINAPI Widget_Value(IWidget __RPC_FAR *iface, VARIANT *value, VARIANT *retval)
static ULONG WINAPI KindaEnum_Release(IKindaEnumWidget *iface)
static void test_marshal_pointer(IWidget *widget, IDispatch *disp)
static void test_marshal_array(IWidget *widget, IDispatch *disp)
static HRESULT WINAPI disp_obj_GetTypeInfo(ISomethingFromDispatch *iface, UINT index, LCID lcid, ITypeInfo **typeinfo)
static void test_marshal_variant(IWidget *widget, IDispatch *disp)
static ITestSecondDisp TestSecondDisp
static HRESULT WINAPI coclass1_test(ICoclass1 *iface)
static struct coclass_obj * impl_from_ICoclass1(ICoclass1 *iface)
static HRESULT WINAPI KindaEnum_Count(IKindaEnumWidget *iface, ULONG __RPC_FAR *count)
static HRESULT WINAPI TestSecondIface_test(ITestSecondIface *iface)
static HRESULT WINAPI Widget_iface_in(IWidget *iface, IUnknown *unk, IDispatch *disp, ISomethingFromDispatch *sfd)
static ItestDual TestDual
static const MYSTRUCT test_mystruct3
static const ISomethingFromDispatchVtbl disp_obj_vtbl
static HRESULT WINAPI coclass1_GetTypeInfo(ICoclass1 *iface, UINT index, LCID lcid, ITypeInfo **typeinfo)
static void test_StaticWidget(void)
static void test_marshal_dispinterface(void)
static HRESULT WINAPI Widget_GetTypeInfoCount(IWidget *iface, UINT __RPC_FAR *pctinfo)
static HRESULT WINAPI Widget_Map(IWidget *iface, BSTR bstrId, BSTR *sValue)
static IStaticWidget StaticWidget
static HRESULT WINAPI Widget_VarArg(IWidget *iface, int numexpect, SAFEARRAY *values)
static const RECT test_rect1
static const ITestSecondIfaceVtbl TestSecondIfaceVtbl
static HRESULT WINAPI Widget_put_prop_with_lcid(IWidget *iface, LONG lcid, INT i)
static HRESULT WINAPI coclass2_QueryInterface(ICoclass2 *iface, REFIID iid, void **out)
static void test_marshal_basetypes(IWidget *widget, IDispatch *disp)
static struct coclass_obj * impl_from_ICoclass2(ICoclass2 *iface)
static HRESULT WINAPI Widget_CloneDispatch(IWidget *iface, IDispatch **ppVal)
static HRESULT WINAPI StaticWidget_QueryInterface(IStaticWidget *iface, REFIID riid, void **ppvObject)
static ULONG WINAPI coclass2_Release(ICoclass2 *iface)
static HRESULT WINAPI Widget_Coclass_ptr(IWidget *iface, Coclass1 **in, Coclass1 **out, Coclass1 **in_out)
static ULONG WINAPI NonOleAutomation_AddRef(INonOleAutomation *iface)
static ULONG WINAPI Widget_Release(IWidget *iface)
static HRESULT WINAPI coclass2_Invoke(ICoclass2 *iface, DISPID id, REFIID iid, LCID lcid, WORD flags, DISPPARAMS *dispparams, VARIANT *result, EXCEPINFO *excepinfo, UINT *errarg)
static ULONG WINAPI disp_obj_AddRef(ISomethingFromDispatch *iface)
static const ICoclass2Vtbl coclass2_vtbl
static HRESULT WINAPI Widget_Coclass_noptr(IWidget *iface, Coclass1 class1, Coclass2 class2, Coclass3 class3)
static const array_t test_array4
static HRESULT WINAPI StaticWidget_TestDual(IStaticWidget *iface, ItestDual *p)
static HRESULT WINAPI Widget_long_ptr(IWidget *iface, LONG *in, LONG *out, LONG *in_out)
static const RECT test_rect5
static HRESULT WINAPI Widget_DoSomething(IWidget __RPC_FAR *iface, double number, BSTR *str1, BSTR str2, VARIANT __RPC_FAR *opt)
static HRESULT WINAPI Widget_Coclass(IWidget *iface, Coclass1 *class1, Coclass2 *class2, Coclass3 *class3)
static ItestDual TestDualDisp
static ULONG WINAPI ExternalConnection_Release(IExternalConnection *iface)
static const RECT test_rect4
static ULONG WINAPI disp_obj_Release(ISomethingFromDispatch *iface)
static HRESULT WINAPI StaticWidget_GetIDsOfNames(IStaticWidget *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
static HRESULT WINAPI Widget_Invoke(IWidget __RPC_FAR *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS __RPC_FAR *pDispParams, VARIANT __RPC_FAR *pVarResult, EXCEPINFO __RPC_FAR *pExcepInfo, UINT __RPC_FAR *puArgErr)
#define ok_ole_success(hr, func)
static const IKindaEnumWidgetVtbl KindaEnumWidget_VTable
static HRESULT WINAPI TestDual_GetTypeInfo(ItestDual *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
static HRESULT WINAPI KindaEnum_Clone(IKindaEnumWidget *iface, IKindaEnumWidget __RPC_FAR *__RPC_FAR *ppenum)
static HRESULT WINAPI TestSecondDisp_Invoke(ITestSecondDisp *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static int external_connections
static ITestSecondDispVtbl TestSecondDispVtbl
static HRESULT WINAPI KindaEnum_Reset(IKindaEnumWidget *iface)
static void test_marshal_safearray(IWidget *widget, IDispatch *disp)
static ITestSecondIface TestSecondIface
static HRESULT WINAPI Widget_variant(IWidget *iface, VARIANT in, VARIANT *out, VARIANT *in_ptr, VARIANT *in_out)
static HRESULT WINAPI Widget_Clone(IWidget *iface, IWidget **ppVal)
static HRESULT WINAPI Widget_variant_array(IWidget *iface, VARIANT in[2], VARIANT out[2], VARIANT in_out[2])
static HRESULT WINAPI TestSecondDisp_GetTypeInfo(ITestSecondDisp *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
static ULONG WINAPI coclass1_Release(ICoclass1 *iface)
static HRESULT WINAPI Widget_mystruct_ptr_ptr(IWidget *iface, MYSTRUCT **in)
static HRESULT WINAPI Widget_put_prop_req_arg(IWidget *iface, INT req, INT i)
static HRESULT WINAPI coclass1_Invoke(ICoclass1 *iface, DISPID id, REFIID iid, LCID lcid, WORD flags, DISPPARAMS *dispparams, VARIANT *result, EXCEPINFO *excepinfo, UINT *errarg)
static HRESULT WINAPI disp_obj_QueryInterface(ISomethingFromDispatch *iface, REFIID iid, void **out)
static HRESULT WINAPI Widget_put_prop_opt_arg(IWidget *iface, INT opt, INT i)
static HRESULT WINAPI Widget_GetTypeInfo(IWidget __RPC_FAR *iface, UINT iTInfo, LCID lcid, ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo)
static HRESULT WINAPI coclass1_QueryInterface(ICoclass1 *iface, REFIID iid, void **out)
static const RECT test_rect2
static HRESULT WINAPI Widget_get_prop_int(IWidget *iface, INT *i)
static const array_t test_array2
static HRESULT WINAPI Widget_get_prop_with_lcid(IWidget *iface, LONG lcid, INT *i)
static void check_safearray(SAFEARRAY *sa, LONG expect)
static const MYSTRUCT test_mystruct6
static const array_t test_array3
static DWORD start_host_object(IStream *stream, REFIID riid, IUnknown *object, MSHLFLAGS marshal_flags, HANDLE *thread)
static BSTR WINAPI NonOleAutomation_BstrRet(INonOleAutomation *iface)
static HRESULT WINAPI KindaEnum_QueryInterface(IKindaEnumWidget *iface, REFIID riid, void __RPC_FAR *__RPC_FAR *ppvObject)
static void end_host_object(DWORD tid, HANDLE thread)
static HRESULT WINAPI Widget_put_State(IWidget __RPC_FAR *iface, STATE state)
static HRESULT WINAPI Widget_array(IWidget *iface, array_t in, array_t out, array_t in_out)
static HRESULT WINAPI disp_obj_anotherfn(ISomethingFromDispatch *iface)
static const struct IWidgetVtbl Widget_VTable
static ULONG WINAPI TestSecondIface_Release(ITestSecondIface *iface)
static HRESULT WINAPI TestDual_Invoke(ItestDual *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static HRESULT register_current_module_typelib(void)
static HRESULT WINAPI Widget_Error(IWidget __RPC_FAR *iface)
static HRESULT WINAPI Widget_neg_restrict(IWidget *iface, INT *i)
static HRESULT WINAPI Widget_long_ptr_ptr(IWidget *iface, LONG **in, LONG **out, LONG **in_out)
static const MYSTRUCT test_mystruct2
static HRESULT WINAPI Widget_basetypes_out(IWidget *iface, signed char *c, short *s, LONG *l, hyper *h, unsigned char *uc, unsigned short *us, ULONG *ul, MIDL_uhyper *uh, float *f, double *d, STATE *st)
static HRESULT WINAPI Widget_GetIDsOfNames(IWidget __RPC_FAR *iface, REFIID riid, LPOLESTR __RPC_FAR *rgszNames, UINT cNames, LCID lcid, DISPID __RPC_FAR *rgDispId)
static ULONG WINAPI NonOleAutomation_Release(INonOleAutomation *iface)
static HRESULT WINAPI Widget_ByRefUInt(IWidget *iface, UINT *i)
#define RELEASEMARSHALDATA
static const array_t test_array1
static HRESULT WINAPI TestSecondDisp_GetIDsOfNames(ITestSecondDisp *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
static HRESULT WINAPI StaticWidget_GetTypeInfo(IStaticWidget *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
static void check_iface_marshal(IUnknown *unk, IDispatch *disp, ISomethingFromDispatch *sfd)
static ULONG WINAPI TestDual_Release(ItestDual *iface)
static HRESULT WINAPI Widget_iface_out(IWidget *iface, IUnknown **unk, IDispatch **disp, ISomethingFromDispatch **sfd)
static ITypeInfo * get_type_info(REFIID riid)
static HRESULT WINAPI Widget_no_in_out(IWidget *iface, BSTR str, int i)
static BOOL expect_last_release_closes
static ULONG WINAPI Widget_AddRef(IWidget *iface)
static IExternalConnection ExternalConnection
static ULONG WINAPI StaticWidget_Release(IStaticWidget *iface)
static DWORD WINAPI ExternalConnection_ReleaseConnection(IExternalConnection *iface, DWORD extconn, DWORD reserved, BOOL fLastReleaseCloses)
static ULONG WINAPI ExternalConnection_AddRef(IExternalConnection *iface)
static HRESULT WINAPI Widget_put_Name(IWidget __RPC_FAR *iface, BSTR name)
static HRESULT WINAPI Widget_iface_ptr(IWidget *iface, ISomethingFromDispatch **in, ISomethingFromDispatch **out, ISomethingFromDispatch **in_out)
static void test_DispCallFunc(void)
static INonOleAutomationVtbl NonOleAutomation_VTable
static const MYSTRUCT test_mystruct1
static Widget * impl_from_IWidget(IWidget *iface)
static HRESULT WINAPI TestSecondIface_QueryInterface(ITestSecondIface *iface, REFIID riid, void **ppv)
static ULONG WINAPI coclass1_AddRef(ICoclass1 *iface)
static ISomethingFromDispatch * create_disp_obj(void)
static struct coclass_obj * create_coclass_obj(void)
static HRESULT WINAPI Widget_CloneInterface(IWidget __RPC_FAR *iface, ISomethingFromDispatch **ppVal)
static ULONG WINAPI TestSecondDisp_Release(ITestSecondDisp *iface)
static HRESULT WINAPI Widget_pos_restrict(IWidget *iface, INT *i)
static HRESULT WINAPI TestSecondDisp_QueryInterface(ITestSecondDisp *iface, REFIID riid, void **ppv)
static const struct thin test_thin_struct
static HRESULT WINAPI Widget_basetypes_in(IWidget *iface, signed char c, short s, LONG l, hyper h, unsigned char uc, unsigned short us, ULONG ul, MIDL_uhyper uh, float f, double d, STATE st)
static HRESULT WINAPI coclass2_GetTypeInfoCount(ICoclass2 *iface, UINT *count)
static HRESULT WINAPI Widget_QueryInterface(IWidget *iface, REFIID riid, void __RPC_FAR *__RPC_FAR *ppvObject)
static HRESULT WINAPI coclass2_test(ICoclass2 *iface)
static DWORD start_host_object2(IStream *stream, REFIID riid, IUnknown *object, MSHLFLAGS marshal_flags, IMessageFilter *filter, HANDLE *thread)
static void test_libattr(void)
static HRESULT WINAPI Widget_mystruct_array(IWidget *iface, MYSTRUCT in[2])
static KindaEnum * impl_from_IKindaEnumWidget(IKindaEnumWidget *iface)
static HRESULT WINAPI disp_obj_GetIDsOfNames(ISomethingFromDispatch *iface, REFIID iid, LPOLESTR *names, UINT count, LCID lcid, DISPID *ids)
static HRESULT WINAPI ExternalConnection_QueryInterface(IExternalConnection *iface, REFIID riid, void **ppv)
static HRESULT WINAPI Widget_get_State(IWidget __RPC_FAR *iface, STATE __RPC_FAR *state)
static const RECT test_rect6
static SAFEARRAY * make_safearray(ULONG len)
static HRESULT WINAPI TestDual_GetTypeInfoCount(ItestDual *iface, UINT *pctinfo)
static HRESULT WINAPI coclass1_GetIDsOfNames(ICoclass1 *iface, REFIID iid, LPOLESTR *names, UINT count, LCID lcid, DISPID *ids)
static const array_t test_array6
static HRESULT WINAPI Widget_thin_struct(IWidget *iface, struct thin in)
static HRESULT WINAPI Widget_iface_noptr(IWidget *iface, IUnknown unk, IDispatch disp, ISomethingFromDispatch sfd)
static IWidget * Widget_Create(void)
static const RECT test_rect3
static HRESULT WINAPI KindaEnum_Next(IKindaEnumWidget *iface, IWidget __RPC_FAR *__RPC_FAR *widget)
static HRESULT WINAPI Widget_VarArg_Run(IWidget *iface, BSTR name, SAFEARRAY *params, VARIANT *result)
static HRESULT WINAPI StaticWidget_Invoke(IStaticWidget *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static HRESULT WINAPI Widget_safearray(IWidget *iface, SAFEARRAY *in, SAFEARRAY **out, SAFEARRAY **in_ptr, SAFEARRAY **in_out)
static const WCHAR test_bstr2[]
static DWORD CALLBACK host_object_proc(LPVOID p)
static HRESULT WINAPI TestDual_GetIDsOfNames(ItestDual *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
static HRESULT WINAPI TestSecondDisp_GetTypeInfoCount(ITestSecondDisp *iface, UINT *pctinfo)
static INonOleAutomation NonOleAutomation
static ULONG WINAPI coclass2_AddRef(ICoclass2 *iface)
static void test_external_connection(void)
static HRESULT WINAPI Widget_VariantArrayPtr(IWidget *iface, SAFEARRAY **values)
static void release_iface_(unsigned int line, void *iface)
static const array_t test_array5
static HRESULT WINAPI disp_obj_Invoke(ISomethingFromDispatch *iface, DISPID id, REFIID iid, LCID lcid, WORD flags, DISPPARAMS *dispparams, VARIANT *result, EXCEPINFO *excepinfo, UINT *errarg)
static const MYSTRUCT test_mystruct4
static HRESULT WINAPI disp_obj_GetTypeInfoCount(ISomethingFromDispatch *iface, UINT *count)
static ISomethingFromDispatch * create_disp_obj2(bool support_idispatch)
static HRESULT WINAPI Widget_VarArg_Ref_Run(IWidget *iface, BSTR name, SAFEARRAY **params, VARIANT *result)
static HRESULT WINAPI Widget_mystruct(IWidget *iface, MYSTRUCT in, MYSTRUCT *out, MYSTRUCT *in_ptr, MYSTRUCT *in_out)
static HRESULT WINAPI Widget_bstr(IWidget *iface, BSTR in, BSTR *out, BSTR *in_ptr, BSTR *in_out)
static ItestDualVtbl TestDualVtbl
static ITypeInfo * NonOleAutomation_GetTypeInfo(void)
static ULONG WINAPI TestSecondIface_AddRef(ITestSecondIface *iface)
static void test_marshal_bstr(IWidget *widget, IDispatch *disp)
static HRESULT WINAPI coclass2_GetIDsOfNames(ICoclass2 *iface, REFIID iid, LPOLESTR *names, UINT count, LCID lcid, DISPID *ids)
static HRESULT WINAPI StaticWidget_TestSecondIface(IStaticWidget *iface, ITestSecondIface *p)
static const MYSTRUCT test_mystruct7
static DWORD WINAPI ExternalConnection_AddConnection(IExternalConnection *iface, DWORD extconn, DWORD reserved)
static ULONG WINAPI TestSecondDisp_AddRef(ITestSecondDisp *iface)
static HRESULT WINAPI Widget_SetOleColor(IWidget *iface, OLE_COLOR val)
static const IExternalConnectionVtbl ExternalConnectionVtbl
static ULONG WINAPI StaticWidget_AddRef(IStaticWidget *iface)
static HRESULT WINAPI Widget_GetOleColor(IWidget *iface, OLE_COLOR *pVal)
static HRESULT WINAPI coclass1_GetTypeInfoCount(ICoclass1 *iface, UINT *count)
static HRESULT WINAPI Widget_get_prop_uint(IWidget *iface, UINT *i)
static HRESULT WINAPI TestSecondDisp_test(ITestSecondDisp *iface)
static struct disp_obj * impl_from_ISomethingFromDispatch(ISomethingFromDispatch *iface)
static const WCHAR test_bstr1[]
static ULONG WINAPI KindaEnum_AddRef(IKindaEnumWidget *iface)
static const MYSTRUCT test_mystruct5
static HRESULT WINAPI Widget_myint(IWidget *iface, myint_t val, myint_t *ptr, myint_t **ptr_ptr)
static void test_typelibmarshal(void)
static const RECT test_rect7
static const WCHAR test_bstr3[]
static void test_marshal_coclass(IWidget *widget, IDispatch *disp)
static ULONG WINAPI TestDual_AddRef(ItestDual *iface)
static const WCHAR test_bstr4[]
static HRESULT WINAPI Widget_rect(IWidget *iface, RECT in, RECT *out, RECT *in_ptr, RECT *in_out)
static const ICoclass1Vtbl coclass1_vtbl
static HRESULT WINAPI Widget_float_abi(IWidget *iface, float f, double d, int i, float f2, double d2)
static void test_marshal_iface(IWidget *widget, IDispatch *disp)
static HRESULT WINAPI NonOleAutomation_Error(INonOleAutomation *iface)
static HRESULT WINAPI StaticWidget_GetTypeInfoCount(IStaticWidget *iface, UINT *pctinfo)
@ DISPID_TM_BASETYPES_OUT
#define DISPID_TM_BYREF_UINT
#define DISPID_TM_COCLASS
#define DISPID_TM_PROP_INT
#define DISPID_TM_VARARG_REF_RUN
#define DISPID_NOA_BSTRRET
#define DISPID_TM_VARARRAYPTR
#define DISPID_TM_CLONEDISPATCH
#define DISPID_TM_DOSOMETHING
#define DISPID_TM_PROP_REQ_ARG
#define DISPID_TM_SETOLECOLOR
#define DISPID_TM_RESTRICTED
#define DISPID_TM_TESTSECONDIFACE
#define DISPID_TM_PROP_UINT
#define DISPID_TM_NEG_RESTRICTED
#define DISPID_TM_TESTDUAL
#define DISPID_TM_PROP_OPT_ARG
#define DISPID_TM_GETOLECOLOR
#define DISPID_TM_CLONECOCLASS
#define DISPID_TM_CLONEINTERFACE
#define DISPID_TM_VARARG_RUN
#define DISPID_TM_VARIANT
#define DISPID_TM_PROP_WITH_LCID
TW_UINT32 TW_UINT16 TW_UINT16 MSG
#define CONTAINING_RECORD(address, type, field)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
void WINAPI VariantInit(VARIANTARG *pVarg)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
DWORD WINAPI GetLastError(void)
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
#define DISP_E_PARAMNOTFOUND
#define DISP_E_NONAMEDARGS
#define DISP_E_BADVARTYPE
#define DISP_E_BADPARAMCOUNT
#define DISP_E_NOTACOLLECTION
#define DISP_E_MEMBERNOTFOUND
#define RPC_X_NULL_REF_POINTER
#define DISP_E_TYPEMISMATCH
LRESULT WINAPI DispatchMessageA(_In_ const MSG *)
BOOL WINAPI PeekMessageA(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
BOOL WINAPI PostThreadMessageA(_In_ DWORD, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI GetMessageA(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
BOOL WINAPI EqualRect(_In_ LPCRECT, _In_ LPCRECT)