Wine-devel
Threads by month
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
August 2020
- 78 participants
- 638 discussions
Re: [PATCH 04/13] oleaut32/tests: Cover GetVarDesc in test_dump_typelib.
by Puetz Kevin A 07 Aug '20
by Puetz Kevin A 07 Aug '20
07 Aug '20
> -----Original Message-----
> From: Marvin <testbot(a)winehq.org>
> Subject: Re: [PATCH 04/13] oleaut32/tests: Cover GetVarDesc in test_dump_typelib.
>
> Hi,
>
> While running your changed tests, I think I found new failures.
> Being a bot and all I'm not very good at pattern recognition, so I might be
> wrong, but could you please double-check?
>
> Full results can be found at:
> https://testbot.winehq.org/JobDetails.pl?Key=76622
>
> Your paranoid android.
>
> === w1064v1809 (64 bit report) ===
>
> oleaut32:
> typelib.c:5290: Interface test_struct
> typelib.c:5402: Variable hr
> typelib.c:5402: Variable b
> typelib.c:5402: Variable disp
> typelib.c:5402: Variable bstr
> typelib.c:5416: Test failed: desc->u.oInst expected 12 got 16
The failures in test_struct are because the field offsets really are different in a 64-bit typelib; the pointers for IDispatch *disp gets bigger, so BSTR bstr moved. I'm not sure how best to fix that; I could easily #ifdef the expected .oInst values, but then it will be a pain to regenerate the info[] stuff that's inlined into typelib.c. Function pointers normalize this checking the index (divided by offset/sizeof(void*) but that doesn't work for var since fields aren't all pointers, just (maybe) some of them. I suppose one could build test_tlb.tlb with --win32 (or --win64) so that it's a consistent set of input data, not architecture-dependent? Suggestions welcome if anyone has a good idea...
Or I could just skip verifying oInst; it's not really related to the custdata or FUNC_DISPATCH bug fixes that were the point of this series, it just wasn't covered before because the whole VARDESC was ignored before, so I tried to fill in some conformance-test coverage, not just narrowly check the fix. Which paid off because I found several more bugs in the FUNC_DISPATCH stuff than the one I started working on...
> typelib.c:5290: Interface _f
> typelib.c:5402: Variable f1
> typelib.c:5402: Variable f2
> typelib.c:5416: Test failed: desc->u.oInst expected 4 got 8
> typelib.c:5290: Interface ff
> typelib.c:5402: Variable ff1
> typelib.c:5402: Variable ff2
> typelib.c:5416: Test failed: desc->u.oInst expected 4 got 8
These look look like Marvin actually found a latent widl bug (on x86 too), that just happened to show up in the new coverage. _f and ff are unions, so the offsets should all be 0, but it apparently counted them like a struct. And since that's what the typelib actually says, windows oleaut32 agrees (on x86, where these info[] came from). So these would clear up (and not be architecture-dependent) if I can find the right spot in widl to fix oInst for unions - will check into it tomorrow.
1
0
[PATCH 05/13] oleaut32/tests: Include [dual] interface in test_dump_typelib.
by Puetz Kevin A 07 Aug '20
by Puetz Kevin A 07 Aug '20
07 Aug '20
Signed-off-by: Kevin Puetz <PuetzKevinA(a)JohnDeere.com>
---
dlls/oleaut32/tests/typelib.c | 61 +++++++++++++++++++++++++++++++----
1 file changed, 55 insertions(+), 6 deletions(-)
diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c
index ecd6bf09b8..2f23949c7d 100644
--- a/dlls/oleaut32/tests/typelib.c
+++ b/dlls/oleaut32/tests/typelib.c
@@ -4345,13 +4345,14 @@ static void test_dump_typelib(const WCHAR *name)
ITypeLib *lib;
int count;
int i;
+ HREFTYPE hRefType = 0;
OLE_CHECK(LoadTypeLib(name, &lib));
printf("/*** Autogenerated data. Do not edit, change the generator above instead. ***/\n");
count = ITypeLib_GetTypeInfoCount(lib);
- for (i = 0; i < count; i++)
+ for (i = 0; i < count;)
{
TYPEATTR *attr;
BSTR name;
@@ -4363,6 +4364,12 @@ static void test_dump_typelib(const WCHAR *name)
" \"%s\",\n", dump_string(name));
OLE_CHECK(ITypeLib_GetTypeInfo(lib, i, &info));
+ if(hRefType) {
+ ITypeInfo *refInfo;
+ OLE_CHECK(ITypeInfo_GetRefTypeInfo(info, hRefType, &refInfo));
+ ITypeInfo_Release(info);
+ info = refInfo;
+ }
OLE_CHECK(ITypeInfo_GetTypeAttr(info, &attr));
printf(" \"%s\",\n", wine_dbgstr_guid(&attr->guid));
@@ -4446,6 +4453,14 @@ static void test_dump_typelib(const WCHAR *name)
if (attr->cVars) printf(" },\n");
printf("},\n");
+ if ((attr->typekind == TKIND_DISPATCH) && (attr->wTypeFlags & TYPEFLAG_FDUAL)
+ && SUCCEEDED(ITypeInfo_GetRefTypeOfImplType(info, -1, &hRefType))) {
+ /* next iteration dumps hRefType, the TKIND_INTERFACE reference underneath this [dual] TKIND_DISPATCH */
+ } else {
+ ++i; /* move to the next item in lib */
+ hRefType = 0;
+ }
+
ITypeInfo_ReleaseTypeAttr(info, attr);
ITypeInfo_Release(info);
SysFreeString(name);
@@ -4804,6 +4819,27 @@ static const type_info info[] = {
},
{ /* vars */ },
},
+{
+ "IDualIface",
+ "{b14b6bb5-904e-4ff9-b247-bd361f7aaedd}",
+ /*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FOLEAUTOMATION|TYPEFLAG_FDUAL, /*align*/ TYPE_ALIGNMENT(IDualIface*), /*size*/ sizeof(IDualIface*),
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 8, /*#func*/ 1, /*#var*/ 0,
+ { /* funcs */
+ {
+ /*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
+ /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
+ {VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "Test",
+ NULL,
+ },
+ },
+ },
+ { /* vars */ },
+},
{
"ISimpleIface",
"{ec5dfcd6-eeb0-4cd6-b51e-8030e1dac009}",
@@ -5270,17 +5306,15 @@ static const type_info info[] = {
static void test_dump_typelib(const WCHAR *name)
{
ITypeLib *typelib;
- int ticount = ARRAY_SIZE(info);
CUSTDATA cust_data;
- int iface, func, var;
+ int iface = 0, func, var;
+ HREFTYPE hRefType = 0;
VARIANT v;
HRESULT hr;
ole_check(LoadTypeLibEx(name, REGKIND_NONE, &typelib));
- expect_eq(ITypeLib_GetTypeInfoCount(typelib), ticount, UINT, "%d");
- for (iface = 0; iface < ticount; iface++)
+ for (const type_info *ti = info; ti != info + ARRAY_SIZE(info); ++ti)
{
- const type_info *ti = &info[iface];
ITypeInfo2 *typeinfo2;
ITypeInfo *typeinfo;
TYPEATTR *typeattr;
@@ -5289,6 +5323,12 @@ static void test_dump_typelib(const WCHAR *name)
trace("Interface %s\n", ti->name);
ole_check(ITypeLib_GetTypeInfo(typelib, iface, &typeinfo));
+ if(hRefType) {
+ ITypeInfo *refInfo;
+ ole_check(ITypeInfo_GetRefTypeInfo(typeinfo, hRefType, &refInfo));
+ ITypeInfo_Release(typeinfo);
+ typeinfo = refInfo;
+ }
ole_check(ITypeLib_GetDocumentation(typelib, iface, &bstrIfName, NULL, &help_ctx, NULL));
expect_wstr_acpval(bstrIfName, ti->name);
SysFreeString(bstrIfName);
@@ -5425,11 +5465,20 @@ static void test_dump_typelib(const WCHAR *name)
ITypeInfo_ReleaseVarDesc(typeinfo, desc);
}
+ if ((typeattr->typekind == TKIND_DISPATCH) && (typeattr->wTypeFlags & TYPEFLAG_FDUAL)
+ && SUCCEEDED(ITypeInfo_GetRefTypeOfImplType(typeinfo, -1, &hRefType))) {
+ /* next iteration dumps hRefType, the TKIND_INTERFACE reference underneath this [dual] TKIND_DISPATCH */
+ } else {
+ ++iface; /* move to the next item in typelib */
+ hRefType = 0;
+ }
+
ITypeInfo_ReleaseTypeAttr(typeinfo, typeattr);
ITypeInfo2_Release(typeinfo2);
ITypeInfo_Release(typeinfo);
}
+ expect_eq(ITypeLib_GetTypeInfoCount(typelib), iface, UINT, "%d");
ITypeLib_Release(typelib);
}
2
1
07 Aug '20
>From 54ab34c62adfdbf618872bbd7f86b20553ead862 Mon Sep 17 00:00:00 2001
From: Kevin Puetz <PuetzKevinA(a)JohnDeere.com>
Date: Fri, 31 Jul 2020 21:21:38 -0500
Subject: [PATCH 04/13] oleaut32/tests: Cover GetVarDesc in test_dump_typelib.
Signed-off-by: Kevin Puetz <PuetzKevinA(a)JohnDeere.com>
---
dlls/oleaut32/tests/typelib.c | 477 ++++++++++++++++++++++++++++++----
1 file changed, 433 insertions(+), 44 deletions(-)
diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c
index 6f68a201ba..ecd6bf09b8 100644
--- a/dlls/oleaut32/tests/typelib.c
+++ b/dlls/oleaut32/tests/typelib.c
@@ -3978,6 +3978,14 @@ static const struct map_entry funckind_map[] = {
{0, NULL}
};
+static const struct map_entry varkind_map[] = {
+ MAP_ENTRY(VAR_PERINSTANCE),
+ MAP_ENTRY(VAR_STATIC),
+ MAP_ENTRY(VAR_CONST),
+ MAP_ENTRY(VAR_DISPATCH),
+ {0, NULL}
+};
+
static const struct map_entry invkind_map[] = {
MAP_ENTRY(INVOKE_FUNC),
MAP_ENTRY(INVOKE_PROPERTYGET),
@@ -4248,6 +4256,65 @@ static const char *dump_func_flags(DWORD flags)
return buf;
}
+static const char *dump_var_flags(DWORD flags)
+{
+ static char buf[256];
+
+ if (!flags) return "0";
+
+ buf[0] = 0;
+
+#define ADD_FLAG(x) if (flags & x) { if (buf[0]) strcat(buf, "|"); strcat(buf, #x); flags &= ~x; }
+ ADD_FLAG(VARFLAG_FREADONLY)
+ ADD_FLAG(VARFLAG_FSOURCE)
+ ADD_FLAG(VARFLAG_FBINDABLE)
+ ADD_FLAG(VARFLAG_FREQUESTEDIT)
+ ADD_FLAG(VARFLAG_FDISPLAYBIND)
+ ADD_FLAG(VARFLAG_FDEFAULTBIND)
+ ADD_FLAG(VARFLAG_FHIDDEN)
+ ADD_FLAG(VARFLAG_FRESTRICTED)
+ ADD_FLAG(VARFLAG_FDEFAULTCOLLELEM)
+ ADD_FLAG(VARFLAG_FUIDEFAULT)
+ ADD_FLAG(VARFLAG_FNONBROWSABLE)
+ ADD_FLAG(VARFLAG_FREPLACEABLE)
+ ADD_FLAG(VARFLAG_FIMMEDIATEBIND)
+#undef ADD_FLAG
+
+ assert(!flags);
+ assert(strlen(buf) < sizeof(buf));
+
+ return buf;
+}
+
+static const char *dump_variant_info(const VARIANT *v)
+{
+ const char *vt_str = map_value(V_VT(v), vt_map);
+ static char buf[256];
+ switch(V_VT(v)) {
+ case VT_I1: sprintf(buf, "{ %s, { .value_int = %d } }", vt_str, V_I1(v)); break;
+ case VT_I2: sprintf(buf, "{ %s, { .value_int = %d } }", vt_str, V_I2(v)); break;
+ case VT_I4: sprintf(buf, "{ %s, { .value_int = %d } }", vt_str, V_I4(v)); break;
+ case VT_I8: sprintf(buf, "{ %s, { .value_int = %s } }", vt_str, wine_dbgstr_longlong(V_I8(v))); break;
+ case VT_INT: sprintf(buf, "{ %s, { .value_int = %d } }", vt_str, V_UINT(v)); break;
+ case VT_BOOL: sprintf(buf, "{ %s, { .value_int = %d } }", vt_str, V_BOOL(v)); break;
+
+ case VT_UI1: sprintf(buf, "{ %s, { .value_uint = %u } }", vt_str, V_UI1(v)); break;
+ case VT_UI2: sprintf(buf, "{ %s, { .value_uint = %u } }", vt_str, V_UI2(v)); break;
+ case VT_UI4: sprintf(buf, "{ %s, { .value_uint = %u } }", vt_str, V_UI4(v)); break;
+ case VT_UI8: sprintf(buf, "{ %s, { .value_uint = %u } }", vt_str, wine_dbgstr_longlong(V_UI8(v))); break;
+ case VT_UINT: sprintf(buf, "{ %s, { .value_uint = %u } }", vt_str, V_UINT(v)); break;
+
+ case VT_R4: sprintf(buf, "{ %s, { .value_float = %0.9g } }", vt_str, V_R4(v)); break;
+ case VT_R8: sprintf(buf, "{ %s, { .value_float = %0.17g } }", vt_str, V_R8(v)); break;
+
+ case VT_BSTR: sprintf(buf, "{ %s, { .value_str = \"%s\" } }", vt_str, dump_string(V_BSTR(v))); break;
+ default:
+ printf("failed - dump_variant_info: cannot serialize %s\n", vt_str);
+ sprintf(buf, "{ %s, { /* cannot dump */ } }", vt_str);
+ }
+ return buf;
+}
+
static int get_href_type(ITypeInfo *info, TYPEDESC *tdesc)
{
int href_type = -1;
@@ -4289,7 +4356,7 @@ static void test_dump_typelib(const WCHAR *name)
TYPEATTR *attr;
BSTR name;
DWORD help_ctx;
- int f = 0;
+ int f = 0, v = 0;
OLE_CHECK(ITypeLib_GetDocumentation(lib, i, &name, NULL, &help_ctx, NULL));
printf("{\n"
@@ -4301,11 +4368,11 @@ static void test_dump_typelib(const WCHAR *name)
printf(" \"%s\",\n", wine_dbgstr_guid(&attr->guid));
printf(" /*kind*/ %s, /*flags*/ %s, /*align*/ %s, /*size*/ %s,\n"
- " /*helpctx*/ 0x%04x, /*version*/ 0x%08x, /*#vtbl*/ %d, /*#func*/ %d,\n",
+ " /*helpctx*/ 0x%04x, /*version*/ 0x%08x, /*#vtbl*/ %d, /*#func*/ %d, /*#var*/ %d,\n",
map_value(attr->typekind, tkind_map), dump_type_flags(attr->wTypeFlags),
print_align(name, attr), print_size(name, attr),
help_ctx, MAKELONG(attr->wMinorVerNum, attr->wMajorVerNum),
- attr->cbSizeVft/sizeof(void*), attr->cFuncs);
+ attr->cbSizeVft/sizeof(void*), attr->cFuncs, attr->cVars);
printf(" { /* funcs */%s", attr->cFuncs ? "\n" : " },\n");
while (1)
@@ -4347,7 +4414,37 @@ static void test_dump_typelib(const WCHAR *name)
ITypeInfo_ReleaseFuncDesc(info, desc);
f++;
}
- if (attr->cFuncs) printf(" }\n");
+ if (attr->cFuncs) printf(" },\n");
+
+ printf(" { /* vars */%s", attr->cVars ? "\n" : " },\n");
+ while (1)
+ {
+ VARDESC *desc;
+ BSTR varname;
+ UINT cNames;
+ if (FAILED(ITypeInfo_GetVarDesc(info, v, &desc)))
+ break;
+ OLE_CHECK(ITypeInfo_GetNames(info, desc->memid, &varname, 1, &cNames));
+ if(cNames!=1) { printf("GetNames failed - VARDESC should have one name, got %d\n", cNames); return; }
+ printf(" {\n"
+ " /*id*/ 0x%x, /*name*/ \"%s\", /*flags*/ %s, /*kind*/ %s,\n",
+ desc->memid, dump_string(varname), dump_var_flags(desc->wVarFlags), map_value(desc->varkind, varkind_map));
+ SysFreeString(varname);
+ if (desc->varkind == VAR_PERINSTANCE) {
+ printf(" { .oInst = %d },\n", desc->DUMMYUNIONNAME.oInst);
+ } else if (desc->varkind == VAR_CONST) {
+ printf(" { .varValue = %s },\n", dump_variant_info(desc->DUMMYUNIONNAME.lpvarValue));
+ } else {
+ printf(" { /* DUMMYUNIONNAME unused*/ },\n");
+ }
+ printf(" {%s, %s, %s}, /* ret */\n", map_value(desc->elemdescVar.tdesc.vt, vt_map),
+ map_value(get_href_type(info, &desc->elemdescVar.tdesc), tkind_map), dump_param_flags(U(desc->elemdescVar).paramdesc.wParamFlags));
+ printf(" },\n");
+ ITypeInfo_ReleaseVarDesc(info, desc);
+ v++;
+ }
+ if (attr->cVars) printf(" },\n");
+
printf("},\n");
ITypeInfo_ReleaseTypeAttr(info, attr);
ITypeInfo_Release(info);
@@ -4358,6 +4455,16 @@ static void test_dump_typelib(const WCHAR *name)
#else
+typedef struct _variant_info {
+ VARTYPE vt;
+ union {
+ INT64 value_int;
+ UINT64 value_uint;
+ double value_float;
+ const char * value_str;
+ };
+} variant_info;
+
typedef struct _element_info
{
VARTYPE vt;
@@ -4381,6 +4488,19 @@ typedef struct _function_info
LPCSTR names[15];
} function_info;
+typedef struct _var_info
+{
+ MEMBERID memid;
+ LPCSTR name;
+ WORD wVarFlags;
+ VARKIND varkind;
+ union {
+ ULONG oInst; /* VAR_PERINSTANCE */
+ variant_info varValue; /* VAR_CONST */
+ } DUMMYUNIONNAME;
+ element_info elemdescVar;
+} var_info;
+
typedef struct _type_info
{
LPCSTR name;
@@ -4393,7 +4513,9 @@ typedef struct _type_info
DWORD version;
USHORT cbSizeVft;
USHORT cFuncs;
+ USHORT cVars;
function_info funcs[20];
+ var_info vars[20];
} type_info;
static const type_info info[] = {
@@ -4402,14 +4524,21 @@ static const type_info info[] = {
"g",
"{b14b6bb5-904e-4ff9-b247-bd361f7a0001}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct g), /*size*/ sizeof(struct g),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
{ /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "g1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 0 },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
},
{
"test_iface",
"{b14b6bb5-904e-4ff9-b247-bd361f7a0002}",
/*kind*/ TKIND_INTERFACE, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(test_iface*), /*size*/ sizeof(test_iface*),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 4, /*#func*/ 1,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 4, /*#func*/ 1, /*#var*/ 0,
{ /* funcs */
{
/*id*/ 0x60010000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
@@ -4425,13 +4554,14 @@ static const type_info info[] = {
NULL,
},
},
- }
+ },
+ { /* vars */ },
},
{
"parent_iface",
"{b14b6bb5-904e-4ff9-b247-bd361f7aa001}",
/*kind*/ TKIND_INTERFACE, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(parent_iface*), /*size*/ sizeof(parent_iface*),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 4, /*#func*/ 1,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 4, /*#func*/ 1, /*#var*/ 0,
{ /* funcs */
{
/*id*/ 0x60010000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
@@ -4447,13 +4577,14 @@ static const type_info info[] = {
NULL,
},
},
- }
+ },
+ { /* vars */ },
},
{
"child_iface",
"{b14b6bb5-904e-4ff9-b247-bd361f7aa002}",
/*kind*/ TKIND_INTERFACE, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(child_iface*), /*size*/ sizeof(child_iface*),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 5, /*#func*/ 1,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 5, /*#func*/ 1, /*#var*/ 0,
{ /* funcs */
{
/*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
@@ -4467,55 +4598,74 @@ static const type_info info[] = {
NULL,
},
},
- }
+ },
+ { /* vars */ },
},
{
"_n",
"{016fe2ec-b2c8-45f8-b23b-39e53a753903}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct _n), /*size*/ sizeof(struct _n),
- /*helpctx*/ 0x0003, /*version*/ 0x00010002, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0003, /*version*/ 0x00010002, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
{ /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "n1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 0 },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
},
{
"n",
"{016fe2ec-b2c8-45f8-b23b-39e53a753902}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(n), /*size*/ sizeof(n),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
{ /* funcs */ },
+ { /* vars */ },
},
{
"nn",
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(nn), /*size*/ sizeof(nn),
- /*helpctx*/ 0x0003, /*version*/ 0x00010002, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0003, /*version*/ 0x00010002, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
{ /* funcs */ },
+ { /* vars */ },
},
{
"_m",
"{016fe2ec-b2c8-45f8-b23b-39e53a753906}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct _m), /*size*/ sizeof(struct _m),
- /*helpctx*/ 0x0003, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0003, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
{ /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "m1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 0 },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
},
{
"m",
"{016fe2ec-b2c8-45f8-b23b-39e53a753905}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(m), /*size*/ sizeof(m),
- /*helpctx*/ 0x0000, /*version*/ 0x00010002, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00010002, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
{ /* funcs */ },
+ { /* vars */ },
},
{
"mm",
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(mm), /*size*/ sizeof(mm),
- /*helpctx*/ 0x0003, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0003, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
{ /* funcs */ },
+ { /* vars */ },
},
{
"IDualIface",
"{b14b6bb5-904e-4ff9-b247-bd361f7aaedd}",
/*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FDUAL, /*align*/ TYPE_ALIGNMENT(IDualIface*), /*size*/ sizeof(IDualIface*),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 7, /*#func*/ 8,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 7, /*#func*/ 8, /*#var*/ 0,
{ /* funcs */
{
/*id*/ 0x60000000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
@@ -4651,13 +4801,14 @@ static const type_info info[] = {
NULL,
},
},
- }
+ },
+ { /* vars */ },
},
{
"ISimpleIface",
"{ec5dfcd6-eeb0-4cd6-b51e-8030e1dac009}",
/*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(ISimpleIface*), /*size*/ sizeof(ISimpleIface*),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 8, /*#func*/ 1,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 8, /*#func*/ 1, /*#var*/ 0,
{ /* funcs */
{
/*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
@@ -4671,153 +4822,338 @@ static const type_info info[] = {
NULL,
},
},
- }
+ },
+ { /* vars */ },
},
{
"test_struct",
"{4029f190-ca4a-4611-aeb9-673983cb96dd}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct test_struct), /*size*/ sizeof(struct test_struct),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 4,
{ /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "hr", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 0 },
+ {VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ {
+ /*id*/ 0x40000001, /*name*/ "b", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 4 },
+ {VT_BOOL, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ {
+ /*id*/ 0x40000002, /*name*/ "disp", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 8 },
+ {VT_DISPATCH, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ {
+ /*id*/ 0x40000003, /*name*/ "bstr", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 12 },
+ {VT_BSTR, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
},
{
"test_struct2",
"{4029f190-ca4a-4611-aeb9-673983cb96de}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct test_struct2), /*size*/ sizeof(struct test_struct2),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 4,
{ /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "hr", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 0 },
+ {VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ {
+ /*id*/ 0x40000001, /*name*/ "b", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 4 },
+ {VT_BOOL, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ {
+ /*id*/ 0x40000002, /*name*/ "disp", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 8 },
+ {VT_DISPATCH, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ {
+ /*id*/ 0x40000003, /*name*/ "bstr", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 12 },
+ {VT_BSTR, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
},
{
"t_INT",
"{016fe2ec-b2c8-45f8-b23b-39e53a75396a}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED, /*align*/ TYPE_ALIGNMENT(t_INT), /*size*/ sizeof(t_INT),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
{ /* funcs */ },
+ { /* vars */ },
},
{
"a",
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(a), /*size*/ sizeof(a),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
{ /* funcs */ },
+ { /* vars */ },
},
{
"_a",
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
{ /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "a1", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 0 } } },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ {
+ /*id*/ 0x40000001, /*name*/ "a2", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 1 } } },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
},
{
"aa",
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
{ /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "aa1", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 0 } } },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ {
+ /*id*/ 0x40000001, /*name*/ "aa2", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 1 } } },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
},
{
"_b",
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
{ /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "b1", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 0 } } },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ {
+ /*id*/ 0x40000001, /*name*/ "b2", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 1 } } },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
},
{
"bb",
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
{ /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "bb1", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 0 } } },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ {
+ /*id*/ 0x40000001, /*name*/ "bb2", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 1 } } },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
},
{
"c",
"{016fe2ec-b2c8-45f8-b23b-39e53a75396b}",
/*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(c), /*size*/ sizeof(c),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
{ /* funcs */ },
+ { /* vars */ },
},
{
"_c",
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
{ /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "c1", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 0 } } },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ {
+ /*id*/ 0x40000001, /*name*/ "c2", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 1 } } },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
},
{
"cc",
"{016fe2ec-b2c8-45f8-b23b-39e53a75396c}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
{ /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "cc1", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 0 } } },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ {
+ /*id*/ 0x40000001, /*name*/ "cc2", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 1 } } },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
},
{
"d",
"{016fe2ec-b2c8-45f8-b23b-39e53a75396d}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(d), /*size*/ sizeof(d),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
{ /* funcs */ },
+ { /* vars */ },
},
{
"_d",
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4,
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
{ /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "d1", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 0 } } },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ {
+ /*id*/ 0x40000001, /*name*/ "d2", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 1 } } },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
},
{
"dd",
"{016fe2ec-b2c8-45f8-b23b-39e53a75396e}",
/*kind*/ TKIND_ENUM, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4,
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
{ /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "dd1", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 0 } } },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ {
+ /*id*/ 0x40000001, /*name*/ "dd2", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 1 } } },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
},
{
"e",
"{016fe2ec-b2c8-45f8-b23b-39e53a753970}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(e), /*size*/ sizeof(e),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
{ /* funcs */ },
+ { /* vars */ },
},
{
"_e",
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_RECORD, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(struct _e), /*size*/ sizeof(struct _e),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
{ /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "e1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 0 },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
},
{
"ee",
"{016fe2ec-b2c8-45f8-b23b-39e53a753971}",
/*kind*/ TKIND_RECORD, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(struct ee), /*size*/ sizeof(struct ee),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
{ /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "ee1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 0 },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
},
{
"f",
"{016fe2ec-b2c8-45f8-b23b-39e53a753972}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(f), /*size*/ sizeof(f),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
{ /* funcs */ },
+ { /* vars */ },
},
{
"_f",
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_UNION, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(union _f), /*size*/ sizeof(union _f),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
{ /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "f1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 0 },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ {
+ /*id*/ 0x40000001, /*name*/ "f2", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 4 },
+ {VT_PTR, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
},
{
"ff",
"{016fe2ec-b2c8-45f8-b23b-39e53a753973}",
/*kind*/ TKIND_UNION, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(union ff), /*size*/ sizeof(union ff),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
{ /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "ff1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 0 },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ {
+ /*id*/ 0x40000001, /*name*/ "ff2", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 4 },
+ {VT_PTR, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
},
{
"ITestIface",
"{ec5dfcd6-eeb0-4cd6-b51e-8030e1dac00a}",
/*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(ITestIface*), /*size*/ sizeof(ITestIface*),
- /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 13, /*#func*/ 6,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 13, /*#func*/ 6, /*#var*/ 0,
{ /* funcs */
{
/*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
@@ -4903,10 +5239,29 @@ static const type_info info[] = {
NULL,
},
},
- }
+ },
+ { /* vars */ },
}
};
+#define check_variant_info(value, expected) { \
+ expect_int(V_VT(value), (expected)->vt); \
+ switch(V_VT(value)) { \
+ case VT_I1: expect_int(V_I1(value), (expected)->value_int); break; \
+ case VT_I2: expect_int(V_I2(value), (expected)->value_int); break; \
+ case VT_I4: expect_int(V_I4(value), (expected)->value_int); break; \
+ case VT_I8: expect_int(V_I8(value), (expected)->value_int); break; \
+ case VT_BOOL: expect_int(V_BOOL(value), (expected)->value_int); break; \
+ case VT_INT: expect_int(V_INT(value), (expected)->value_int); break; \
+ case VT_UI1: expect_int(V_UI1(value), (expected)->value_uint); break; \
+ case VT_UI2: expect_int(V_UI2(value), (expected)->value_uint); break; \
+ case VT_UI4: expect_int(V_UI4(value), (expected)->value_uint); break; \
+ case VT_UI8: expect_int(V_UI8(value), (expected)->value_uint); break; \
+ case VT_UINT: expect_int(V_UINT(value), (expected)->value_uint); break; \
+ case VT_BSTR: expect_wstr_acpval(V_BSTR(value), (expected)->value_str); break; \
+ default: skip("check_variant_info: comparing value not implemented for VARTYPE %d\n",V_VT(value)); \
+ } }
+
#define check_type(elem, info) { \
expect_int((elem)->tdesc.vt, (info)->vt); \
expect_hex(U(*(elem)).paramdesc.wParamFlags, (info)->wParamFlags); \
@@ -4917,7 +5272,7 @@ static void test_dump_typelib(const WCHAR *name)
ITypeLib *typelib;
int ticount = ARRAY_SIZE(info);
CUSTDATA cust_data;
- int iface, func;
+ int iface, func, var;
VARIANT v;
HRESULT hr;
@@ -4947,6 +5302,7 @@ static void test_dump_typelib(const WCHAR *name)
expect_int(MAKELONG(typeattr->wMinorVerNum, typeattr->wMajorVerNum), ti->version);
expect_int(typeattr->cbSizeVft, ti->cbSizeVft * sizeof(void*));
expect_int(typeattr->cFuncs, ti->cFuncs);
+ expect_int(typeattr->cVars, ti->cVars);
/* compare type uuid */
if (ti->uuid && *ti->uuid)
@@ -5036,6 +5392,39 @@ static void test_dump_typelib(const WCHAR *name)
ClearCustData(&cust_data);
}
+ for (var = 0; var < typeattr->cVars; var++)
+ {
+ const var_info *var_info = &ti->vars[var];
+ VARDESC *desc;
+ BSTR varname;
+ UINT cNames;
+
+ trace("Variable %s\n", var_info->name);
+ ole_check(ITypeInfo_GetVarDesc(typeinfo, var, &desc));
+
+ expect_int(desc->memid, var_info->memid);
+
+ ole_check(ITypeInfo_GetNames(typeinfo, desc->memid, &varname, 1, &cNames));
+ expect_int(cNames, 1);
+ expect_wstr_acpval(varname, var_info->name);
+ SysFreeString(varname);
+
+ expect_null(desc->lpstrSchema); /* Reserved */
+ expect_int(desc->wVarFlags, var_info->wVarFlags);
+ expect_int(desc->varkind, var_info->varkind);
+ if(desc->varkind == VAR_PERINSTANCE) {
+ expect_int(desc->DUMMYUNIONNAME.oInst, var_info->DUMMYUNIONNAME.oInst);
+ } else if(desc->varkind == VAR_CONST) {
+ check_variant_info(desc->DUMMYUNIONNAME.lpvarValue, &var_info->DUMMYUNIONNAME.varValue);
+ } else {
+ expect_null(desc->DUMMYUNIONNAME.lpvarValue);
+ }
+
+ check_type(&desc->elemdescVar, &var_info->elemdescVar);
+
+ ITypeInfo_ReleaseVarDesc(typeinfo, desc);
+ }
+
ITypeInfo_ReleaseTypeAttr(typeinfo, typeattr);
ITypeInfo2_Release(typeinfo2);
2
1
[PATCH v2 13/13] oleaut32: Load GetVarCustData from MSFT-format typelib.
by Puetz Kevin A 07 Aug '20
by Puetz Kevin A 07 Aug '20
07 Aug '20
Signed-off-by: Kevin Puetz <PuetzKevinA(a)JohnDeere.com>
---
Drop the hunk that moved into v2 07/13 (where it belongs)
---
dlls/oleaut32/tests/test_tlb.idl | 51 ++++++++++-
dlls/oleaut32/tests/typelib.c | 146 +++++++++++++++++++++++++++++++
dlls/oleaut32/typelib.c | 3 +
3 files changed, 199 insertions(+), 1 deletion(-)
diff --git a/dlls/oleaut32/tests/test_tlb.idl b/dlls/oleaut32/tests/test_tlb.idl
index b8fecc9a01..251897c91e 100644
--- a/dlls/oleaut32/tests/test_tlb.idl
+++ b/dlls/oleaut32/tests/test_tlb.idl
@@ -26,7 +26,17 @@ import "oaidl.idl"; /* needed by widl */
midl_pragma warning ( disable : 2368 )
-[uuid(8b05fe77-4a6c-4133-b9cd-8f81747af784)]
+#define CUSTDATA_BSTR c8768723-e6d2-4442-b039-92e9c82429c4
+
+#define CUSTDATA_STRLIT c8768723-e6d2-4442-b039-92e9c82429c4
+#define CUSTDATA_NUM b481b478-a181-4eb6-b6e0-df63069e8c80
+#define CUSTDATA_HEXNUM a09d7c06-cf38-4db3-9450-10641651c35b
+
+[uuid(8b05fe77-4a6c-4133-b9cd-8f81747af784),
+custom(CUSTDATA_STRLIT,"ITypeLib2::GetCustData"),
+custom(CUSTDATA_NUM,42),
+custom(CUSTDATA_HEXNUM,0x1337C0D3),
+]
library Test
{
importlib("stdole2.tlb");
@@ -170,4 +180,43 @@ library Test
{
interface ITestDispDual;
}
+
+ [uuid(786ee4ff-c5dd-4bf4-9578-0d22fb5369cc),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetCustData interface")]
+ interface custdata_interface : IDispatch
+ {
+ [custom(CUSTDATA_STRLIT,"ITypeInfo2::GetFuncCustData custdata_interface::test_method")]
+ HRESULT test_method([in,custom(CUSTDATA_STRLIT,"ITypeInfo2::GetParamCustData custdata_interface::test_method(x)")] int x);
+ }
+
+ [uuid(6ca99f5e-c86a-42ad-a5ee-5bd4c8e5553c),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetCustData enum")]
+ enum custdata_enum {
+ One, Two
+ };
+
+ [uuid(62fabe17-f733-4b09-b859-3f455dcda450),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetCustData struct")]
+ struct custdata_struct {
+ [custom(CUSTDATA_STRLIT,"ITypeInfo2::GetVarCustData struct")]
+ int test_field;
+ };
+
+ [/* uuid(...) not allowed on union */ custom(CUSTDATA_STRLIT,"ITypeInfo2::GetCustData union")]
+ union custdata_union {
+ [custom(CUSTDATA_STRLIT,"ITypeInfo2::GetVarCustData union")]
+ int test_field;
+ };
+
+ [public,uuid(d58744d6-63f9-467c-87e5-c95158098b18),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetCustData typedef")]
+ typedef custdata_interface * custdata_typedef;
+
+ [uuid(bffc216e-2159-465a-80df-b85fd4f4f122),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetCustData dispinterface")]
+ dispinterface custdata_dispatch
+ {
+properties:
+ [id(0),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetVarCustData dispinterface property")]
+ int test_property;
+methods:
+ [id(1),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetFuncCustData dispinterface method")]
+ // FIXME: if the custom strings were identical, midl would de-duplicate them; widl writes them twice.
+ void test_method([in,custom(CUSTDATA_STRLIT,"ITypeInfo2::GetParamCustData test_dispatch::test_method(x)")] int x);
+ }
}
diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c
index 8ecdec4c13..66b9f7f25a 100644
--- a/dlls/oleaut32/tests/typelib.c
+++ b/dlls/oleaut32/tests/typelib.c
@@ -6124,6 +6124,152 @@ static const type_info info[] = {
},
},
{ /* vars */ },
+},
+{
+ "custdata_interface",
+ "{786ee4ff-c5dd-4bf4-9578-0d22fb5369cc}",
+ /*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(custdata_interface*), /*size*/ sizeof(custdata_interface*),
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 8, /*#func*/ 1, /*#var*/ 0,
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetCustData interface" } } },
+ },
+ { /* funcs */
+ {
+ /*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
+ /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
+ {VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetFuncCustData custdata_interface::test_method" } } },
+ },
+ { /* params */
+ {VT_INT, -1, PARAMFLAG_FIN, /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetParamCustData custdata_interface::test_method(x)" } } },
+ } },
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_method",
+ "x",
+ NULL,
+ },
+ },
+ },
+ { /* vars */ },
+},
+{
+ "custdata_enum",
+ "{6ca99f5e-c86a-42ad-a5ee-5bd4c8e5553c}",
+ /*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetCustData enum" } } },
+ },
+ { /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "One", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ {
+ /*id*/ 0x40000001, /*name*/ "Two", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
+},
+{
+ "custdata_struct",
+ "{62fabe17-f733-4b09-b859-3f455dcda450}",
+ /*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct custdata_struct), /*size*/ sizeof(struct custdata_struct),
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetCustData struct" } } },
+ },
+ { /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "test_field", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 0 },
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetVarCustData struct" } } },
+ },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
+},
+{
+ "custdata_union",
+ "{00000000-0000-0000-0000-000000000000}",
+ /*kind*/ TKIND_UNION, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(union custdata_union), /*size*/ sizeof(union custdata_union),
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetCustData union" } } },
+ },
+ { /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "test_field", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 0 },
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetVarCustData union" } } },
+ },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
+},
+{
+ "custdata_typedef",
+ "{d58744d6-63f9-467c-87e5-c95158098b18}",
+ /*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(custdata_typedef), /*size*/ sizeof(custdata_typedef),
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetCustData typedef" } } },
+ },
+ { /* funcs */ },
+ { /* vars */ },
+},
+{
+ "custdata_dispatch",
+ "{bffc216e-2159-465a-80df-b85fd4f4f122}",
+ /*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(custdata_dispatch*), /*size*/ sizeof(custdata_dispatch*),
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 7, /*#func*/ 1, /*#var*/ 1,
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetCustData dispinterface" } } },
+ },
+ { /* funcs */
+ {
+ /*id*/ 0x1, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
+ /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
+ {VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetFuncCustData dispinterface method" } } },
+ },
+ { /* params */
+ {VT_INT, -1, PARAMFLAG_FIN, /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetParamCustData test_dispatch::test_method(x)" } } },
+ } },
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_method",
+ "x",
+ NULL,
+ },
+ },
+ },
+ { /* vars */
+ {
+ /*id*/ 0x0, /*name*/ "test_property", /*flags*/ 0, /*kind*/ VAR_DISPATCH,
+ { /* DUMMYUNIONNAME unused*/ },
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetVarCustData dispinterface property" } } },
+ },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
}
};
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index 6dbd8c39b2..99181e206e 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -2600,6 +2600,9 @@ static void MSFT_DoVars(TLBContext *pcx, ITypeInfoImpl *pTI, int cFuncs,
if(reclength > FIELD_OFFSET(MSFT_VarRecord, HelpString))
ptvd->HelpString = MSFT_ReadString(pcx, pVarRec->HelpString);
+ if (reclength > FIELD_OFFSET(MSFT_VarRecord, oCustData))
+ MSFT_CustData(pcx, pVarRec->oCustData, &ptvd->custdata_list);
+
if(reclength > FIELD_OFFSET(MSFT_VarRecord, HelpStringContext))
ptvd->HelpStringContext = pVarRec->HelpStringContext;
--
2.27.0.windows.1
1
0
[PATCH] vbscript: Implement case insensitive search in InStrRev function
by Dmitry Kislyuk 07 Aug '20
by Dmitry Kislyuk 07 Aug '20
07 Aug '20
2
1
07 Aug '20
Signed-off-by: Kevin Puetz <PuetzKevinA(a)JohnDeere.com>
---
dlls/oleaut32/tests/typelib.c | 253 ++++++++++++++++++++++++++++++++--
1 file changed, 245 insertions(+), 8 deletions(-)
diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c
index d4b573eb7a..2891e75689 100644
--- a/dlls/oleaut32/tests/typelib.c
+++ b/dlls/oleaut32/tests/typelib.c
@@ -4315,6 +4315,12 @@ static const char *dump_variant_info(const VARIANT *v)
return buf;
}
+static const char *dump_custdata_info(LPCUSTDATAITEM item) {
+ static char buf[256];
+ sprintf(buf, "{ \"%s\", %s }", wine_dbgstr_guid(&item->guid), dump_variant_info(&item->varValue));
+ return buf;
+}
+
static int get_href_type(ITypeInfo *info, TYPEDESC *tdesc)
{
int href_type = -1;
@@ -4342,10 +4348,12 @@ static int get_href_type(ITypeInfo *info, TYPEDESC *tdesc)
static void test_dump_typelib(const WCHAR *name)
{
ITypeInfo *info;
+ ITypeInfo2 *info2;
ITypeLib *lib;
int count;
int i;
HREFTYPE hRefType = 0;
+ CUSTDATA cust_data;
OLE_CHECK(LoadTypeLib(name, &lib));
@@ -4357,7 +4365,7 @@ static void test_dump_typelib(const WCHAR *name)
TYPEATTR *attr;
BSTR name;
DWORD help_ctx;
- int f = 0, v = 0;
+ int f = 0, v = 0, c = 0;
OLE_CHECK(ITypeLib_GetDocumentation(lib, i, &name, NULL, &help_ctx, NULL));
printf("{\n"
@@ -4370,7 +4378,10 @@ static void test_dump_typelib(const WCHAR *name)
ITypeInfo_Release(info);
info = refInfo;
}
+ OLE_CHECK(ITypeInfo_QueryInterface(info, &IID_ITypeInfo2, (void**)&info2));
+
OLE_CHECK(ITypeInfo_GetTypeAttr(info, &attr));
+ OLE_CHECK(ITypeInfo2_GetAllCustData(info2,&cust_data));
printf(" \"%s\",\n", wine_dbgstr_guid(&attr->guid));
@@ -4381,6 +4392,13 @@ static void test_dump_typelib(const WCHAR *name)
help_ctx, MAKELONG(attr->wMinorVerNum, attr->wMajorVerNum),
attr->cbSizeVft/sizeof(void*), attr->cFuncs, attr->cVars);
+ printf(" /*#custdata*/ %d, %s\n", cust_data.cCustData, cust_data.cCustData ? "{" : "{},");
+ for (c = 0; c < cust_data.cCustData; ++c) {
+ printf(" %s,\n", dump_custdata_info(&cust_data.prgCustData[c]));
+ }
+ if (cust_data.cCustData) printf(" },\n");
+ ClearCustData(&cust_data);
+
printf(" { /* funcs */%s", attr->cFuncs ? "\n" : " },\n");
while (1)
{
@@ -4391,6 +4409,7 @@ static void test_dump_typelib(const WCHAR *name)
if (FAILED(ITypeInfo_GetFuncDesc(info, f, &desc)))
break;
+ OLE_CHECK(ITypeInfo2_GetAllFuncCustData(info2,f,&cust_data));
printf(" {\n"
" /*id*/ 0x%x, /*func*/ %s, /*inv*/ %s, /*call*/ %s,\n",
desc->memid, map_value(desc->funckind, funckind_map), map_value(desc->invkind, invkind_map),
@@ -4399,12 +4418,30 @@ static void test_dump_typelib(const WCHAR *name)
desc->cParams, desc->cParamsOpt, desc->oVft/sizeof(void*), desc->cScodes, dump_func_flags(desc->wFuncFlags));
printf(" {%s, %s, %s}, /* ret */\n", map_value(desc->elemdescFunc.tdesc.vt, vt_map),
map_value(get_href_type(info, &desc->elemdescFunc.tdesc), tkind_map), dump_param_flags(U(desc->elemdescFunc).paramdesc.wParamFlags));
+ printf(" /*#custdata*/ %d, %s\n", cust_data.cCustData, cust_data.cCustData ? "{" : "{},");
+ for (c = 0; c < cust_data.cCustData; ++c) {
+ printf(" %s,\n", dump_custdata_info(&cust_data.prgCustData[c]));
+ }
+ if (cust_data.cCustData) printf(" },\n");
+ ClearCustData(&cust_data);
+
printf(" { /* params */\n");
for (p = 0; p < desc->cParams; p++)
{
ELEMDESC e = desc->lprgelemdescParam[p];
- printf(" {%s, %s, %s},\n", map_value(e.tdesc.vt, vt_map),
+ OLE_CHECK(ITypeInfo2_GetAllParamCustData(info2,f,p,&cust_data));
+ printf(" {%s, %s, %s", map_value(e.tdesc.vt, vt_map),
map_value(get_href_type(info, &e.tdesc), tkind_map), dump_param_flags(U(e).paramdesc.wParamFlags));
+ if (cust_data.cCustData) {
+ printf(", /*#custdata*/ %d, {\n", cust_data.cCustData);
+ for (c = 0; c < cust_data.cCustData; ++c) {
+ printf(" %s,\n", dump_custdata_info(&cust_data.prgCustData[c]));
+ }
+ printf(" } },\n");
+ } else {
+ printf("},\n");
+ }
+ ClearCustData(&cust_data);
}
printf(" {-1, 0, 0}\n");
printf(" },\n");
@@ -4431,6 +4468,7 @@ static void test_dump_typelib(const WCHAR *name)
UINT cNames;
if (FAILED(ITypeInfo_GetVarDesc(info, v, &desc)))
break;
+ OLE_CHECK(ITypeInfo2_GetAllVarCustData(info2,v,&cust_data));
OLE_CHECK(ITypeInfo_GetNames(info, desc->memid, &varname, 1, &cNames));
if(cNames!=1) { printf("GetNames failed - VARDESC should have one name, got %d\n", cNames); return; }
printf(" {\n"
@@ -4444,6 +4482,14 @@ static void test_dump_typelib(const WCHAR *name)
} else {
printf(" { /* DUMMYUNIONNAME unused*/ },\n");
}
+
+ printf(" /*#custdata*/ %d, %s\n", cust_data.cCustData, cust_data.cCustData ? "{" : "{},");
+ for (c = 0; c < cust_data.cCustData; ++c) {
+ printf(" %s,\n", dump_custdata_info(&cust_data.prgCustData[c]));
+ }
+ if (cust_data.cCustData) printf(" },\n");
+ ClearCustData(&cust_data);
+
printf(" {%s, %s, %s}, /* ret */\n", map_value(desc->elemdescVar.tdesc.vt, vt_map),
map_value(get_href_type(info, &desc->elemdescVar.tdesc), tkind_map), dump_param_flags(U(desc->elemdescVar).paramdesc.wParamFlags));
printf(" },\n");
@@ -4462,6 +4508,7 @@ static void test_dump_typelib(const WCHAR *name)
}
ITypeInfo_ReleaseTypeAttr(info, attr);
+ ITypeInfo2_Release(info2);
ITypeInfo_Release(info);
SysFreeString(name);
}
@@ -4480,11 +4527,18 @@ typedef struct _variant_info {
};
} variant_info;
+typedef struct _custdata_info {
+ LPCSTR uuid;
+ variant_info value;
+} custdata_info;
+
typedef struct _element_info
{
VARTYPE vt;
TYPEKIND type;
USHORT wParamFlags;
+ DWORD cCustData;
+ custdata_info custdata[5];
} element_info;
typedef struct _function_info
@@ -4499,6 +4553,8 @@ typedef struct _function_info
short cScodes;
WORD wFuncFlags;
element_info ret_type;
+ DWORD cCustData;
+ custdata_info custdata[5];
element_info params[15];
LPCSTR names[15];
} function_info;
@@ -4513,6 +4569,8 @@ typedef struct _var_info
ULONG oInst; /* VAR_PERINSTANCE */
variant_info varValue; /* VAR_CONST */
} DUMMYUNIONNAME;
+ DWORD cCustData;
+ custdata_info custdata[5];
element_info elemdescVar;
} var_info;
@@ -4529,6 +4587,8 @@ typedef struct _type_info
USHORT cbSizeVft;
USHORT cFuncs;
USHORT cVars;
+ DWORD cCustData;
+ custdata_info custdata[5];
function_info funcs[20];
var_info vars[20];
} type_info;
@@ -4540,11 +4600,13 @@ static const type_info info[] = {
"{b14b6bb5-904e-4ff9-b247-bd361f7a0001}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct g), /*size*/ sizeof(struct g),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "g1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4554,11 +4616,13 @@ static const type_info info[] = {
"{b14b6bb5-904e-4ff9-b247-bd361f7a0002}",
/*kind*/ TKIND_INTERFACE, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(test_iface*), /*size*/ sizeof(test_iface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 4, /*#func*/ 1, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60010000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FIN},
{-1, 0, 0}
@@ -4577,11 +4641,13 @@ static const type_info info[] = {
"{b14b6bb5-904e-4ff9-b247-bd361f7aa001}",
/*kind*/ TKIND_INTERFACE, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(parent_iface*), /*size*/ sizeof(parent_iface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 4, /*#func*/ 1, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60010000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -4600,11 +4666,13 @@ static const type_info info[] = {
"{b14b6bb5-904e-4ff9-b247-bd361f7aa002}",
/*kind*/ TKIND_INTERFACE, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(child_iface*), /*size*/ sizeof(child_iface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 5, /*#func*/ 1, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 4, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -4621,11 +4689,13 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753903}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct _n), /*size*/ sizeof(struct _n),
/*helpctx*/ 0x0003, /*version*/ 0x00010002, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "n1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4635,6 +4705,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753902}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(n), /*size*/ sizeof(n),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -4643,6 +4714,7 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(nn), /*size*/ sizeof(nn),
/*helpctx*/ 0x0003, /*version*/ 0x00010002, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -4651,11 +4723,13 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753906}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct _m), /*size*/ sizeof(struct _m),
/*helpctx*/ 0x0003, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "m1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4665,6 +4739,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753905}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(m), /*size*/ sizeof(m),
/*helpctx*/ 0x0000, /*version*/ 0x00010002, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -4673,6 +4748,7 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(mm), /*size*/ sizeof(mm),
/*helpctx*/ 0x0003, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -4681,11 +4757,13 @@ static const type_info info[] = {
"{b14b6bb5-904e-4ff9-b247-bd361f7aaedd}",
/*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FDUAL, /*align*/ TYPE_ALIGNMENT(IDualIface*), /*size*/ sizeof(IDualIface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 7, /*#func*/ 8, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60000000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 2, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FOUT},
@@ -4702,6 +4780,7 @@ static const type_info info[] = {
/*id*/ 0x60000001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 1, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_UI4, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -4714,6 +4793,7 @@ static const type_info info[] = {
/*id*/ 0x60000002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 2, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_UI4, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -4726,6 +4806,7 @@ static const type_info info[] = {
/*id*/ 0x60010000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT},
{-1, 0, 0}
@@ -4740,6 +4821,7 @@ static const type_info info[] = {
/*id*/ 0x60010001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 3, /*#opt*/ 0, /*vtbl*/ 4, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_UINT, -1, PARAMFLAG_FIN},
{VT_UI4, -1, PARAMFLAG_FIN},
@@ -4758,6 +4840,7 @@ static const type_info info[] = {
/*id*/ 0x60010002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 5, /*#opt*/ 0, /*vtbl*/ 5, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FIN},
@@ -4780,6 +4863,7 @@ static const type_info info[] = {
/*id*/ 0x60010003, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 8, /*#opt*/ 0, /*vtbl*/ 6, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_I4, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FIN},
@@ -4808,6 +4892,7 @@ static const type_info info[] = {
/*id*/ 0x60020000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -4845,11 +4930,13 @@ static const type_info info[] = {
"{ec5dfcd6-eeb0-4cd6-b51e-8030e1dac009}",
/*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(ISimpleIface*), /*size*/ sizeof(ISimpleIface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 8, /*#func*/ 1, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -4866,26 +4953,31 @@ static const type_info info[] = {
"{4029f190-ca4a-4611-aeb9-673983cb96dd}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct test_struct), /*size*/ sizeof(struct test_struct),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 4,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "hr", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "b", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 4 },
+ /*#custdata*/ 0, {},
{VT_BOOL, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000002, /*name*/ "disp", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 8 },
+ /*#custdata*/ 0, {},
{VT_DISPATCH, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000003, /*name*/ "bstr", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 12 },
+ /*#custdata*/ 0, {},
{VT_BSTR, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4895,26 +4987,31 @@ static const type_info info[] = {
"{4029f190-ca4a-4611-aeb9-673983cb96de}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct test_struct2), /*size*/ sizeof(struct test_struct2),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 4,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "hr", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "b", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 4 },
+ /*#custdata*/ 0, {},
{VT_BOOL, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000002, /*name*/ "disp", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 8 },
+ /*#custdata*/ 0, {},
{VT_DISPATCH, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000003, /*name*/ "bstr", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 12 },
+ /*#custdata*/ 0, {},
{VT_BSTR, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4924,6 +5021,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a75396a}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED, /*align*/ TYPE_ALIGNMENT(t_INT), /*size*/ sizeof(t_INT),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -4932,6 +5030,7 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(a), /*size*/ sizeof(a),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -4940,16 +5039,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "a1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "a2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4959,16 +5061,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "aa1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "aa2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4978,16 +5083,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "b1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "b2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4997,16 +5105,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "bb1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "bb2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5016,6 +5127,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a75396b}",
/*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(c), /*size*/ sizeof(c),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -5024,16 +5136,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "c1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "c2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5043,16 +5158,19 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a75396c}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "cc1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "cc2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5062,6 +5180,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a75396d}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(d), /*size*/ sizeof(d),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -5070,16 +5189,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "d1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "d2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5089,16 +5211,19 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a75396e}",
/*kind*/ TKIND_ENUM, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "dd1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "dd2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5108,6 +5233,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753970}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(e), /*size*/ sizeof(e),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -5116,11 +5242,13 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_RECORD, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(struct _e), /*size*/ sizeof(struct _e),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "e1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5130,11 +5258,13 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753971}",
/*kind*/ TKIND_RECORD, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(struct ee), /*size*/ sizeof(struct ee),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "ee1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5144,6 +5274,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753972}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(f), /*size*/ sizeof(f),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -5152,16 +5283,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_UNION, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(union _f), /*size*/ sizeof(union _f),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "f1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "f2", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 4 },
+ /*#custdata*/ 0, {},
{VT_PTR, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5171,16 +5305,19 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753973}",
/*kind*/ TKIND_UNION, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(union ff), /*size*/ sizeof(union ff),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "ff1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "ff2", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 4 },
+ /*#custdata*/ 0, {},
{VT_PTR, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5190,11 +5327,13 @@ static const type_info info[] = {
"{ec5dfcd6-eeb0-4cd6-b51e-8030e1dac00a}",
/*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(ITestIface*), /*size*/ sizeof(ITestIface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 13, /*#func*/ 6, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE},
{-1, 0, 0}
@@ -5209,6 +5348,7 @@ static const type_info info[] = {
/*id*/ 0x60020001, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 8, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_USERDEFINED, TKIND_ENUM, PARAMFLAG_NONE},
{-1, 0, 0}
@@ -5223,6 +5363,7 @@ static const type_info info[] = {
/*id*/ 0x60020002, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 9, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE},
{-1, 0, 0}
@@ -5237,6 +5378,7 @@ static const type_info info[] = {
/*id*/ 0x60020003, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 10, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE},
{-1, 0, 0}
@@ -5251,6 +5393,7 @@ static const type_info info[] = {
/*id*/ 0x60020004, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 11, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE},
{-1, 0, 0}
@@ -5265,6 +5408,7 @@ static const type_info info[] = {
/*id*/ 0x60020005, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 12, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE},
{-1, 0, 0}
@@ -5283,11 +5427,13 @@ static const type_info info[] = {
"{2d4430d5-99ea-4645-85f0-c5814b72804b}",
/*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(ITestDispatch*), /*size*/ sizeof(ITestDispatch*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 7, /*#func*/ 7, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x1, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5300,6 +5446,7 @@ static const type_info info[] = {
/*id*/ 0x2, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -5314,6 +5461,7 @@ static const type_info info[] = {
/*id*/ 0x3, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5326,6 +5474,7 @@ static const type_info info[] = {
/*id*/ 0x4, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -5340,6 +5489,7 @@ static const type_info info[] = {
/*id*/ 0x5, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5352,6 +5502,7 @@ static const type_info info[] = {
/*id*/ 0x6, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -5366,6 +5517,7 @@ static const type_info info[] = {
/*id*/ 0x7, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 2, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_BSTR, -1, PARAMFLAG_FIN},
{VT_I4, -1, PARAMFLAG_FLCID},
@@ -5383,11 +5535,13 @@ static const type_info info[] = {
{
/*id*/ 0xa, /*name*/ "property_int", /*flags*/ 0, /*kind*/ VAR_DISPATCH,
{ /* DUMMYUNIONNAME unused*/ },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0xb, /*name*/ "property_HRESULT", /*flags*/ 0, /*kind*/ VAR_DISPATCH,
{ /* DUMMYUNIONNAME unused*/ },
+ /*#custdata*/ 0, {},
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5619,6 +5773,7 @@ static const type_info info[] = {
/*id*/ 0x1, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5631,6 +5786,7 @@ static const type_info info[] = {
/*id*/ 0x2, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 8, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -5645,6 +5801,7 @@ static const type_info info[] = {
/*id*/ 0x3, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 9, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5657,6 +5814,7 @@ static const type_info info[] = {
/*id*/ 0x4, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 10, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -5671,6 +5829,7 @@ static const type_info info[] = {
/*id*/ 0x5, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 11, /*#scodes*/ 0, /*flags*/ 0,
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5683,6 +5842,7 @@ static const type_info info[] = {
/*id*/ 0x6, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 12, /*#scodes*/ 0, /*flags*/ 0,
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -5697,6 +5857,7 @@ static const type_info info[] = {
/*id*/ 0x7, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 3, /*#opt*/ 0, /*vtbl*/ 13, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_BSTR, -1, PARAMFLAG_FIN},
{VT_I4, -1, PARAMFLAG_FLCID},
@@ -5719,11 +5880,13 @@ static const type_info info[] = {
"{cdb105e3-24fb-4ae6-b826-801b7b2a0a07}",
/*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(ITestDispInherit*), /*size*/ sizeof(ITestDispInherit*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 7, /*#func*/ 14, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60000000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 2, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FOUT},
@@ -5740,6 +5903,7 @@ static const type_info info[] = {
/*id*/ 0x60000001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 1, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_UI4, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5752,6 +5916,7 @@ static const type_info info[] = {
/*id*/ 0x60000002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 2, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_UI4, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5846,6 +6011,7 @@ static const type_info info[] = {
/*id*/ 0x1, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5858,6 +6024,7 @@ static const type_info info[] = {
/*id*/ 0x2, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 8, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5870,6 +6037,7 @@ static const type_info info[] = {
/*id*/ 0x3, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 9, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5882,6 +6050,7 @@ static const type_info info[] = {
/*id*/ 0x4, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 10, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5894,6 +6063,7 @@ static const type_info info[] = {
/*id*/ 0x5, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 11, /*#scodes*/ 0, /*flags*/ 0,
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5906,6 +6076,7 @@ static const type_info info[] = {
/*id*/ 0x6, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 12, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5918,6 +6089,7 @@ static const type_info info[] = {
/*id*/ 0x7, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 13, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_BSTR, -1, PARAMFLAG_FIN},
{-1, 0, 0}
@@ -5956,11 +6128,18 @@ static const type_info info[] = {
expect_hex(U(*(elem)).paramdesc.wParamFlags, (info)->wParamFlags); \
}
+static void parse_guid(LPCSTR strGuid, GUID *guid)
+{
+ WCHAR guidW[39];
+ MultiByteToWideChar(CP_ACP, 0, strGuid, -1, guidW, ARRAY_SIZE(guidW));
+ ole_check(IIDFromString(guidW, guid));
+}
+
static void test_dump_typelib(const WCHAR *name)
{
ITypeLib *typelib;
CUSTDATA cust_data;
- int iface = 0, func, var;
+ int iface = 0, func, var, cust;
HREFTYPE hRefType = 0;
VARIANT v;
HRESULT hr;
@@ -6000,13 +6179,11 @@ static void test_dump_typelib(const WCHAR *name)
/* compare type uuid */
if (ti->uuid && *ti->uuid)
{
- WCHAR guidW[39];
ITypeInfo *typeinfo2;
HRESULT hr;
GUID guid;
- MultiByteToWideChar(CP_ACP, 0, ti->uuid, -1, guidW, ARRAY_SIZE(guidW));
- IIDFromString(guidW, &guid);
+ parse_guid(ti->uuid,&guid);
expect_guid(&guid, &typeattr->guid);
/* check that it's possible to search using this uuid */
@@ -6016,9 +6193,26 @@ static void test_dump_typelib(const WCHAR *name)
if (hr == S_OK) ITypeInfo_Release(typeinfo2);
}
+ ole_check(ITypeInfo_GetTypeAttr(typeinfo, &typeattr));
+
hr = ITypeInfo_QueryInterface(typeinfo, &IID_ITypeInfo2, (void**)&typeinfo2);
ok(hr == S_OK, "Could not get ITypeInfo2: %08x\n", hr);
+ memset(&cust_data, 0, sizeof(cust_data));
+ ole_check(ITypeInfo2_GetAllCustData(typeinfo2,&cust_data));
+ expect_int(cust_data.cCustData, ti->cCustData);
+ ClearCustData(&cust_data);
+ for (cust = 0; cust < ti->cCustData; cust++)
+ {
+ GUID guid;
+ parse_guid(ti->custdata[cust].uuid,&guid);
+ /* check that it's possible to search using this uuid */
+ hr = ITypeInfo2_GetCustData(typeinfo2,&guid,&v);
+ ok(hr == S_OK, "GetCustDatafailed: %08x\n", hr);
+ check_variant_info(&v,&ti->custdata[cust].value);
+ VariantClear(&v);
+ }
+
for (func = 0; func < typeattr->cFuncs; func++)
{
const function_info *fn_info = &ti->funcs[func];
@@ -6038,6 +6232,22 @@ static void test_dump_typelib(const WCHAR *name)
expect_int(desc->oVft, fn_info->vtbl_index * sizeof(void*));
expect_int(desc->cScodes, fn_info->cScodes);
expect_int(desc->wFuncFlags, fn_info->wFuncFlags);
+
+ memset(&cust_data, 0, sizeof(cust_data));
+ ole_check(ITypeInfo2_GetAllFuncCustData(typeinfo2,func,&cust_data));
+ expect_int(cust_data.cCustData, fn_info->cCustData);
+ ClearCustData(&cust_data);
+ for (cust = 0; cust < fn_info->cCustData; cust++)
+ {
+ GUID guid;
+ parse_guid(fn_info->custdata[cust].uuid,&guid);
+ /* check that it's possible to search using this uuid */
+ hr = ITypeInfo2_GetFuncCustData(typeinfo2,func,&guid,&v);
+ ok(hr == S_OK, "GetCustDatafailed: %08x\n", hr);
+ check_variant_info(&v,&fn_info->custdata[cust].value);
+ VariantClear(&v);
+ }
+
ole_check(ITypeInfo_GetNames(typeinfo, desc->memid, namesTab, 256, &cNames));
for (i = 0; i < cNames; i++)
{
@@ -6051,6 +6261,21 @@ static void test_dump_typelib(const WCHAR *name)
{
check_type(&desc->lprgelemdescParam[i], &fn_info->params[i]);
+ memset(&cust_data, 0, sizeof(cust_data));
+ ole_check(ITypeInfo2_GetAllParamCustData(typeinfo2,func,i,&cust_data));
+ expect_int(cust_data.cCustData, fn_info->params[i].cCustData);
+ ClearCustData(&cust_data);
+ for (cust = 0; cust < fn_info->params[i].cCustData; cust++)
+ {
+ GUID guid;
+ parse_guid(fn_info->params[i].custdata[cust].uuid,&guid);
+ /* check that it's possible to search using this uuid */
+ hr = ITypeInfo2_GetParamCustData(typeinfo2,func,i,&guid,&v);
+ ok(hr == S_OK, "GetParamCustDatafailed: %08x\n", hr);
+ check_variant_info(&v,&fn_info->params[i].custdata[cust].value);
+ VariantClear(&v);
+ }
+
if (desc->lprgelemdescParam[i].tdesc.vt == VT_USERDEFINED)
{
ITypeInfo *param;
@@ -6080,9 +6305,7 @@ static void test_dump_typelib(const WCHAR *name)
VariantClear(&v);
memset(&cust_data, 0, sizeof(cust_data));
- hr = ITypeInfo2_GetAllCustData(typeinfo2, &cust_data);
ITypeInfo_ReleaseFuncDesc(typeinfo, desc);
- ClearCustData(&cust_data);
}
for (var = 0; var < typeattr->cVars; var++)
@@ -6112,6 +6335,20 @@ static void test_dump_typelib(const WCHAR *name)
} else {
expect_null(desc->DUMMYUNIONNAME.lpvarValue);
}
+ memset(&cust_data, 0, sizeof(cust_data));
+ ole_check(ITypeInfo2_GetAllVarCustData(typeinfo2,var,&cust_data));
+ expect_int(cust_data.cCustData, var_info->cCustData);
+ ClearCustData(&cust_data);
+ for (cust = 0; cust < var_info->cCustData; cust++)
+ {
+ GUID guid;
+ parse_guid(var_info->custdata[cust].uuid,&guid);
+ /* check that it's possible to search using this uuid */
+ hr = ITypeInfo2_GetVarCustData(typeinfo2,var,&guid,&v);
+ ok(hr == S_OK, "GetVarCustData failed: %08x\n", hr);
+ check_variant_info(&v,&var_info->custdata[cust].value);
+ VariantClear(&v);
+ }
check_type(&desc->elemdescVar, &var_info->elemdescVar);
2
1
[PATCH v2 07/13] oleaut32/tests: Cover Get*CustData in test_dump_typelib.
by Puetz Kevin A 07 Aug '20
by Puetz Kevin A 07 Aug '20
07 Aug '20
Signed-off-by: Kevin Puetz <PuetzKevinA(a)JohnDeere.com>
--
Misplaced a hunk into 13/13 that belonged here.
---
dlls/oleaut32/tests/typelib.c | 275 +++++++++++++++++++++++++++++++++-
1 file changed, 267 insertions(+), 8 deletions(-)
diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c
index d4b573eb7a..8ecdec4c13 100644
--- a/dlls/oleaut32/tests/typelib.c
+++ b/dlls/oleaut32/tests/typelib.c
@@ -4315,6 +4315,12 @@ static const char *dump_variant_info(const VARIANT *v)
return buf;
}
+static const char *dump_custdata_info(LPCUSTDATAITEM item) {
+ static char buf[256];
+ sprintf(buf, "{ \"%s\", %s }", wine_dbgstr_guid(&item->guid), dump_variant_info(&item->varValue));
+ return buf;
+}
+
static int get_href_type(ITypeInfo *info, TYPEDESC *tdesc)
{
int href_type = -1;
@@ -4342,10 +4348,12 @@ static int get_href_type(ITypeInfo *info, TYPEDESC *tdesc)
static void test_dump_typelib(const WCHAR *name)
{
ITypeInfo *info;
+ ITypeInfo2 *info2;
ITypeLib *lib;
int count;
int i;
HREFTYPE hRefType = 0;
+ CUSTDATA cust_data;
OLE_CHECK(LoadTypeLib(name, &lib));
@@ -4357,7 +4365,7 @@ static void test_dump_typelib(const WCHAR *name)
TYPEATTR *attr;
BSTR name;
DWORD help_ctx;
- int f = 0, v = 0;
+ int f = 0, v = 0, c = 0;
OLE_CHECK(ITypeLib_GetDocumentation(lib, i, &name, NULL, &help_ctx, NULL));
printf("{\n"
@@ -4370,7 +4378,10 @@ static void test_dump_typelib(const WCHAR *name)
ITypeInfo_Release(info);
info = refInfo;
}
+ OLE_CHECK(ITypeInfo_QueryInterface(info, &IID_ITypeInfo2, (void**)&info2));
+
OLE_CHECK(ITypeInfo_GetTypeAttr(info, &attr));
+ OLE_CHECK(ITypeInfo2_GetAllCustData(info2,&cust_data));
printf(" \"%s\",\n", wine_dbgstr_guid(&attr->guid));
@@ -4381,6 +4392,13 @@ static void test_dump_typelib(const WCHAR *name)
help_ctx, MAKELONG(attr->wMinorVerNum, attr->wMajorVerNum),
attr->cbSizeVft/sizeof(void*), attr->cFuncs, attr->cVars);
+ printf(" /*#custdata*/ %d, %s\n", cust_data.cCustData, cust_data.cCustData ? "{" : "{},");
+ for (c = 0; c < cust_data.cCustData; ++c) {
+ printf(" %s,\n", dump_custdata_info(&cust_data.prgCustData[c]));
+ }
+ if (cust_data.cCustData) printf(" },\n");
+ ClearCustData(&cust_data);
+
printf(" { /* funcs */%s", attr->cFuncs ? "\n" : " },\n");
while (1)
{
@@ -4391,6 +4409,7 @@ static void test_dump_typelib(const WCHAR *name)
if (FAILED(ITypeInfo_GetFuncDesc(info, f, &desc)))
break;
+ OLE_CHECK(ITypeInfo2_GetAllFuncCustData(info2,f,&cust_data));
printf(" {\n"
" /*id*/ 0x%x, /*func*/ %s, /*inv*/ %s, /*call*/ %s,\n",
desc->memid, map_value(desc->funckind, funckind_map), map_value(desc->invkind, invkind_map),
@@ -4399,12 +4418,30 @@ static void test_dump_typelib(const WCHAR *name)
desc->cParams, desc->cParamsOpt, desc->oVft/sizeof(void*), desc->cScodes, dump_func_flags(desc->wFuncFlags));
printf(" {%s, %s, %s}, /* ret */\n", map_value(desc->elemdescFunc.tdesc.vt, vt_map),
map_value(get_href_type(info, &desc->elemdescFunc.tdesc), tkind_map), dump_param_flags(U(desc->elemdescFunc).paramdesc.wParamFlags));
+ printf(" /*#custdata*/ %d, %s\n", cust_data.cCustData, cust_data.cCustData ? "{" : "{},");
+ for (c = 0; c < cust_data.cCustData; ++c) {
+ printf(" %s,\n", dump_custdata_info(&cust_data.prgCustData[c]));
+ }
+ if (cust_data.cCustData) printf(" },\n");
+ ClearCustData(&cust_data);
+
printf(" { /* params */\n");
for (p = 0; p < desc->cParams; p++)
{
ELEMDESC e = desc->lprgelemdescParam[p];
- printf(" {%s, %s, %s},\n", map_value(e.tdesc.vt, vt_map),
+ OLE_CHECK(ITypeInfo2_GetAllParamCustData(info2,f,p,&cust_data));
+ printf(" {%s, %s, %s", map_value(e.tdesc.vt, vt_map),
map_value(get_href_type(info, &e.tdesc), tkind_map), dump_param_flags(U(e).paramdesc.wParamFlags));
+ if (cust_data.cCustData) {
+ printf(", /*#custdata*/ %d, {\n", cust_data.cCustData);
+ for (c = 0; c < cust_data.cCustData; ++c) {
+ printf(" %s,\n", dump_custdata_info(&cust_data.prgCustData[c]));
+ }
+ printf(" } },\n");
+ } else {
+ printf("},\n");
+ }
+ ClearCustData(&cust_data);
}
printf(" {-1, 0, 0}\n");
printf(" },\n");
@@ -4431,6 +4468,7 @@ static void test_dump_typelib(const WCHAR *name)
UINT cNames;
if (FAILED(ITypeInfo_GetVarDesc(info, v, &desc)))
break;
+ OLE_CHECK(ITypeInfo2_GetAllVarCustData(info2,v,&cust_data));
OLE_CHECK(ITypeInfo_GetNames(info, desc->memid, &varname, 1, &cNames));
if(cNames!=1) { printf("GetNames failed - VARDESC should have one name, got %d\n", cNames); return; }
printf(" {\n"
@@ -4444,6 +4482,14 @@ static void test_dump_typelib(const WCHAR *name)
} else {
printf(" { /* DUMMYUNIONNAME unused*/ },\n");
}
+
+ printf(" /*#custdata*/ %d, %s\n", cust_data.cCustData, cust_data.cCustData ? "{" : "{},");
+ for (c = 0; c < cust_data.cCustData; ++c) {
+ printf(" %s,\n", dump_custdata_info(&cust_data.prgCustData[c]));
+ }
+ if (cust_data.cCustData) printf(" },\n");
+ ClearCustData(&cust_data);
+
printf(" {%s, %s, %s}, /* ret */\n", map_value(desc->elemdescVar.tdesc.vt, vt_map),
map_value(get_href_type(info, &desc->elemdescVar.tdesc), tkind_map), dump_param_flags(U(desc->elemdescVar).paramdesc.wParamFlags));
printf(" },\n");
@@ -4462,6 +4508,7 @@ static void test_dump_typelib(const WCHAR *name)
}
ITypeInfo_ReleaseTypeAttr(info, attr);
+ ITypeInfo2_Release(info2);
ITypeInfo_Release(info);
SysFreeString(name);
}
@@ -4480,11 +4527,18 @@ typedef struct _variant_info {
};
} variant_info;
+typedef struct _custdata_info {
+ LPCSTR uuid;
+ variant_info value;
+} custdata_info;
+
typedef struct _element_info
{
VARTYPE vt;
TYPEKIND type;
USHORT wParamFlags;
+ DWORD cCustData;
+ custdata_info custdata[5];
} element_info;
typedef struct _function_info
@@ -4499,6 +4553,8 @@ typedef struct _function_info
short cScodes;
WORD wFuncFlags;
element_info ret_type;
+ DWORD cCustData;
+ custdata_info custdata[5];
element_info params[15];
LPCSTR names[15];
} function_info;
@@ -4513,6 +4569,8 @@ typedef struct _var_info
ULONG oInst; /* VAR_PERINSTANCE */
variant_info varValue; /* VAR_CONST */
} DUMMYUNIONNAME;
+ DWORD cCustData;
+ custdata_info custdata[5];
element_info elemdescVar;
} var_info;
@@ -4529,6 +4587,8 @@ typedef struct _type_info
USHORT cbSizeVft;
USHORT cFuncs;
USHORT cVars;
+ DWORD cCustData;
+ custdata_info custdata[5];
function_info funcs[20];
var_info vars[20];
} type_info;
@@ -4540,11 +4600,13 @@ static const type_info info[] = {
"{b14b6bb5-904e-4ff9-b247-bd361f7a0001}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct g), /*size*/ sizeof(struct g),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "g1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4554,11 +4616,13 @@ static const type_info info[] = {
"{b14b6bb5-904e-4ff9-b247-bd361f7a0002}",
/*kind*/ TKIND_INTERFACE, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(test_iface*), /*size*/ sizeof(test_iface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 4, /*#func*/ 1, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60010000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FIN},
{-1, 0, 0}
@@ -4577,11 +4641,13 @@ static const type_info info[] = {
"{b14b6bb5-904e-4ff9-b247-bd361f7aa001}",
/*kind*/ TKIND_INTERFACE, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(parent_iface*), /*size*/ sizeof(parent_iface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 4, /*#func*/ 1, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60010000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -4600,11 +4666,13 @@ static const type_info info[] = {
"{b14b6bb5-904e-4ff9-b247-bd361f7aa002}",
/*kind*/ TKIND_INTERFACE, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(child_iface*), /*size*/ sizeof(child_iface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 5, /*#func*/ 1, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 4, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -4621,11 +4689,13 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753903}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct _n), /*size*/ sizeof(struct _n),
/*helpctx*/ 0x0003, /*version*/ 0x00010002, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "n1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4635,6 +4705,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753902}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(n), /*size*/ sizeof(n),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -4643,6 +4714,7 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(nn), /*size*/ sizeof(nn),
/*helpctx*/ 0x0003, /*version*/ 0x00010002, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -4651,11 +4723,13 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753906}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct _m), /*size*/ sizeof(struct _m),
/*helpctx*/ 0x0003, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "m1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4665,6 +4739,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753905}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(m), /*size*/ sizeof(m),
/*helpctx*/ 0x0000, /*version*/ 0x00010002, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -4673,6 +4748,7 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(mm), /*size*/ sizeof(mm),
/*helpctx*/ 0x0003, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -4681,11 +4757,13 @@ static const type_info info[] = {
"{b14b6bb5-904e-4ff9-b247-bd361f7aaedd}",
/*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FDUAL, /*align*/ TYPE_ALIGNMENT(IDualIface*), /*size*/ sizeof(IDualIface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 7, /*#func*/ 8, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60000000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 2, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FOUT},
@@ -4702,6 +4780,7 @@ static const type_info info[] = {
/*id*/ 0x60000001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 1, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_UI4, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -4714,6 +4793,7 @@ static const type_info info[] = {
/*id*/ 0x60000002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 2, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_UI4, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -4726,6 +4806,7 @@ static const type_info info[] = {
/*id*/ 0x60010000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT},
{-1, 0, 0}
@@ -4740,6 +4821,7 @@ static const type_info info[] = {
/*id*/ 0x60010001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 3, /*#opt*/ 0, /*vtbl*/ 4, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_UINT, -1, PARAMFLAG_FIN},
{VT_UI4, -1, PARAMFLAG_FIN},
@@ -4758,6 +4840,7 @@ static const type_info info[] = {
/*id*/ 0x60010002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 5, /*#opt*/ 0, /*vtbl*/ 5, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FIN},
@@ -4780,6 +4863,7 @@ static const type_info info[] = {
/*id*/ 0x60010003, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 8, /*#opt*/ 0, /*vtbl*/ 6, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_I4, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FIN},
@@ -4808,6 +4892,7 @@ static const type_info info[] = {
/*id*/ 0x60020000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -4824,11 +4909,13 @@ static const type_info info[] = {
"{b14b6bb5-904e-4ff9-b247-bd361f7aaedd}",
/*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FOLEAUTOMATION|TYPEFLAG_FDUAL, /*align*/ TYPE_ALIGNMENT(IDualIface*), /*size*/ sizeof(IDualIface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 8, /*#func*/ 1, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -4845,11 +4932,13 @@ static const type_info info[] = {
"{ec5dfcd6-eeb0-4cd6-b51e-8030e1dac009}",
/*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(ISimpleIface*), /*size*/ sizeof(ISimpleIface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 8, /*#func*/ 1, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -4866,26 +4955,31 @@ static const type_info info[] = {
"{4029f190-ca4a-4611-aeb9-673983cb96dd}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct test_struct), /*size*/ sizeof(struct test_struct),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 4,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "hr", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "b", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 4 },
+ /*#custdata*/ 0, {},
{VT_BOOL, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000002, /*name*/ "disp", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 8 },
+ /*#custdata*/ 0, {},
{VT_DISPATCH, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000003, /*name*/ "bstr", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 12 },
+ /*#custdata*/ 0, {},
{VT_BSTR, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4895,26 +4989,31 @@ static const type_info info[] = {
"{4029f190-ca4a-4611-aeb9-673983cb96de}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct test_struct2), /*size*/ sizeof(struct test_struct2),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 4,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "hr", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "b", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 4 },
+ /*#custdata*/ 0, {},
{VT_BOOL, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000002, /*name*/ "disp", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 8 },
+ /*#custdata*/ 0, {},
{VT_DISPATCH, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000003, /*name*/ "bstr", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 12 },
+ /*#custdata*/ 0, {},
{VT_BSTR, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4924,6 +5023,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a75396a}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED, /*align*/ TYPE_ALIGNMENT(t_INT), /*size*/ sizeof(t_INT),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -4932,6 +5032,7 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(a), /*size*/ sizeof(a),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -4940,16 +5041,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "a1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "a2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4959,16 +5063,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "aa1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "aa2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4978,16 +5085,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "b1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "b2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4997,16 +5107,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "bb1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "bb2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5016,6 +5129,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a75396b}",
/*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(c), /*size*/ sizeof(c),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -5024,16 +5138,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "c1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "c2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5043,16 +5160,19 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a75396c}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "cc1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "cc2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5062,6 +5182,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a75396d}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(d), /*size*/ sizeof(d),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -5070,16 +5191,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "d1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "d2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5089,16 +5213,19 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a75396e}",
/*kind*/ TKIND_ENUM, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "dd1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "dd2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5108,6 +5235,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753970}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(e), /*size*/ sizeof(e),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -5116,11 +5244,13 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_RECORD, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(struct _e), /*size*/ sizeof(struct _e),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "e1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5130,11 +5260,13 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753971}",
/*kind*/ TKIND_RECORD, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(struct ee), /*size*/ sizeof(struct ee),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "ee1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5144,6 +5276,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753972}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(f), /*size*/ sizeof(f),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -5152,16 +5285,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_UNION, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(union _f), /*size*/ sizeof(union _f),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "f1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "f2", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 4 },
+ /*#custdata*/ 0, {},
{VT_PTR, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5171,16 +5307,19 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753973}",
/*kind*/ TKIND_UNION, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(union ff), /*size*/ sizeof(union ff),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "ff1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "ff2", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 4 },
+ /*#custdata*/ 0, {},
{VT_PTR, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5190,11 +5329,13 @@ static const type_info info[] = {
"{ec5dfcd6-eeb0-4cd6-b51e-8030e1dac00a}",
/*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(ITestIface*), /*size*/ sizeof(ITestIface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 13, /*#func*/ 6, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE},
{-1, 0, 0}
@@ -5209,6 +5350,7 @@ static const type_info info[] = {
/*id*/ 0x60020001, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 8, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_USERDEFINED, TKIND_ENUM, PARAMFLAG_NONE},
{-1, 0, 0}
@@ -5223,6 +5365,7 @@ static const type_info info[] = {
/*id*/ 0x60020002, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 9, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE},
{-1, 0, 0}
@@ -5237,6 +5380,7 @@ static const type_info info[] = {
/*id*/ 0x60020003, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 10, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE},
{-1, 0, 0}
@@ -5251,6 +5395,7 @@ static const type_info info[] = {
/*id*/ 0x60020004, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 11, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE},
{-1, 0, 0}
@@ -5265,6 +5410,7 @@ static const type_info info[] = {
/*id*/ 0x60020005, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 12, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE},
{-1, 0, 0}
@@ -5283,11 +5429,13 @@ static const type_info info[] = {
"{2d4430d5-99ea-4645-85f0-c5814b72804b}",
/*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(ITestDispatch*), /*size*/ sizeof(ITestDispatch*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 7, /*#func*/ 7, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x1, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5300,6 +5448,7 @@ static const type_info info[] = {
/*id*/ 0x2, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -5314,6 +5463,7 @@ static const type_info info[] = {
/*id*/ 0x3, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5326,6 +5476,7 @@ static const type_info info[] = {
/*id*/ 0x4, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -5340,6 +5491,7 @@ static const type_info info[] = {
/*id*/ 0x5, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5352,6 +5504,7 @@ static const type_info info[] = {
/*id*/ 0x6, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -5366,6 +5519,7 @@ static const type_info info[] = {
/*id*/ 0x7, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 2, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_BSTR, -1, PARAMFLAG_FIN},
{VT_I4, -1, PARAMFLAG_FLCID},
@@ -5383,11 +5537,13 @@ static const type_info info[] = {
{
/*id*/ 0xa, /*name*/ "property_int", /*flags*/ 0, /*kind*/ VAR_DISPATCH,
{ /* DUMMYUNIONNAME unused*/ },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0xb, /*name*/ "property_HRESULT", /*flags*/ 0, /*kind*/ VAR_DISPATCH,
{ /* DUMMYUNIONNAME unused*/ },
+ /*#custdata*/ 0, {},
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5397,11 +5553,13 @@ static const type_info info[] = {
"{79ca07f9-ac22-44ac-9aaf-811f45412293}",
/*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FDUAL, /*align*/ TYPE_ALIGNMENT(ITestDispDual*), /*size*/ sizeof(ITestDispDual*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 7, /*#func*/ 14, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60000000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 2, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FOUT},
@@ -5418,6 +5576,7 @@ static const type_info info[] = {
/*id*/ 0x60000001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 1, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_UI4, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5430,6 +5589,7 @@ static const type_info info[] = {
/*id*/ 0x60000002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 2, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_UI4, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5442,6 +5602,7 @@ static const type_info info[] = {
/*id*/ 0x60010000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT},
{-1, 0, 0}
@@ -5456,6 +5617,7 @@ static const type_info info[] = {
/*id*/ 0x60010001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 3, /*#opt*/ 0, /*vtbl*/ 4, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_UINT, -1, PARAMFLAG_FIN},
{VT_UI4, -1, PARAMFLAG_FIN},
@@ -5474,6 +5636,7 @@ static const type_info info[] = {
/*id*/ 0x60010002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 5, /*#opt*/ 0, /*vtbl*/ 5, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FIN},
@@ -5496,6 +5659,7 @@ static const type_info info[] = {
/*id*/ 0x60010003, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 8, /*#opt*/ 0, /*vtbl*/ 6, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_I4, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FIN},
@@ -5524,6 +5688,7 @@ static const type_info info[] = {
/*id*/ 0x1, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5536,6 +5701,7 @@ static const type_info info[] = {
/*id*/ 0x2, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 8, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5548,6 +5714,7 @@ static const type_info info[] = {
/*id*/ 0x3, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 9, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5560,6 +5727,7 @@ static const type_info info[] = {
/*id*/ 0x4, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 10, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5572,6 +5740,7 @@ static const type_info info[] = {
/*id*/ 0x5, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 11, /*#scodes*/ 0, /*flags*/ 0,
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5584,6 +5753,7 @@ static const type_info info[] = {
/*id*/ 0x6, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 12, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5596,6 +5766,7 @@ static const type_info info[] = {
/*id*/ 0x7, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 13, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_BSTR, -1, PARAMFLAG_FIN},
{-1, 0, 0}
@@ -5614,11 +5785,13 @@ static const type_info info[] = {
"{79ca07f9-ac22-44ac-9aaf-811f45412293}",
/*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FOLEAUTOMATION|TYPEFLAG_FDUAL, /*align*/ TYPE_ALIGNMENT(ITestDispDual*), /*size*/ sizeof(ITestDispDual*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 14, /*#func*/ 7, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x1, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5631,6 +5804,7 @@ static const type_info info[] = {
/*id*/ 0x2, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 8, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -5645,6 +5819,7 @@ static const type_info info[] = {
/*id*/ 0x3, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 9, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5657,6 +5832,7 @@ static const type_info info[] = {
/*id*/ 0x4, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 10, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -5671,6 +5847,7 @@ static const type_info info[] = {
/*id*/ 0x5, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 11, /*#scodes*/ 0, /*flags*/ 0,
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5683,6 +5860,7 @@ static const type_info info[] = {
/*id*/ 0x6, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 12, /*#scodes*/ 0, /*flags*/ 0,
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -5697,6 +5875,7 @@ static const type_info info[] = {
/*id*/ 0x7, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 3, /*#opt*/ 0, /*vtbl*/ 13, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_BSTR, -1, PARAMFLAG_FIN},
{VT_I4, -1, PARAMFLAG_FLCID},
@@ -5719,11 +5898,13 @@ static const type_info info[] = {
"{cdb105e3-24fb-4ae6-b826-801b7b2a0a07}",
/*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(ITestDispInherit*), /*size*/ sizeof(ITestDispInherit*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 7, /*#func*/ 14, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60000000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 2, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FOUT},
@@ -5740,6 +5921,7 @@ static const type_info info[] = {
/*id*/ 0x60000001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 1, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_UI4, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5752,6 +5934,7 @@ static const type_info info[] = {
/*id*/ 0x60000002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 2, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_UI4, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5764,6 +5947,7 @@ static const type_info info[] = {
/*id*/ 0x60010000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT},
{-1, 0, 0}
@@ -5778,6 +5962,7 @@ static const type_info info[] = {
/*id*/ 0x60010001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 3, /*#opt*/ 0, /*vtbl*/ 4, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_UINT, -1, PARAMFLAG_FIN},
{VT_UI4, -1, PARAMFLAG_FIN},
@@ -5796,6 +5981,7 @@ static const type_info info[] = {
/*id*/ 0x60010002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 5, /*#opt*/ 0, /*vtbl*/ 5, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FIN},
@@ -5818,6 +6004,7 @@ static const type_info info[] = {
/*id*/ 0x60010003, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 8, /*#opt*/ 0, /*vtbl*/ 6, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_I4, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FIN},
@@ -5846,6 +6033,7 @@ static const type_info info[] = {
/*id*/ 0x1, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5858,6 +6046,7 @@ static const type_info info[] = {
/*id*/ 0x2, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 8, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5870,6 +6059,7 @@ static const type_info info[] = {
/*id*/ 0x3, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 9, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5882,6 +6072,7 @@ static const type_info info[] = {
/*id*/ 0x4, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 10, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5894,6 +6085,7 @@ static const type_info info[] = {
/*id*/ 0x5, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 11, /*#scodes*/ 0, /*flags*/ 0,
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5906,6 +6098,7 @@ static const type_info info[] = {
/*id*/ 0x6, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 12, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5918,6 +6111,7 @@ static const type_info info[] = {
/*id*/ 0x7, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 13, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_BSTR, -1, PARAMFLAG_FIN},
{-1, 0, 0}
@@ -5956,11 +6150,18 @@ static const type_info info[] = {
expect_hex(U(*(elem)).paramdesc.wParamFlags, (info)->wParamFlags); \
}
+static void parse_guid(LPCSTR strGuid, GUID *guid)
+{
+ WCHAR guidW[39];
+ MultiByteToWideChar(CP_ACP, 0, strGuid, -1, guidW, ARRAY_SIZE(guidW));
+ ole_check(IIDFromString(guidW, guid));
+}
+
static void test_dump_typelib(const WCHAR *name)
{
ITypeLib *typelib;
CUSTDATA cust_data;
- int iface = 0, func, var;
+ int iface = 0, func, var, cust;
HREFTYPE hRefType = 0;
VARIANT v;
HRESULT hr;
@@ -6000,13 +6201,11 @@ static void test_dump_typelib(const WCHAR *name)
/* compare type uuid */
if (ti->uuid && *ti->uuid)
{
- WCHAR guidW[39];
ITypeInfo *typeinfo2;
HRESULT hr;
GUID guid;
- MultiByteToWideChar(CP_ACP, 0, ti->uuid, -1, guidW, ARRAY_SIZE(guidW));
- IIDFromString(guidW, &guid);
+ parse_guid(ti->uuid,&guid);
expect_guid(&guid, &typeattr->guid);
/* check that it's possible to search using this uuid */
@@ -6016,9 +6215,26 @@ static void test_dump_typelib(const WCHAR *name)
if (hr == S_OK) ITypeInfo_Release(typeinfo2);
}
+ ole_check(ITypeInfo_GetTypeAttr(typeinfo, &typeattr));
+
hr = ITypeInfo_QueryInterface(typeinfo, &IID_ITypeInfo2, (void**)&typeinfo2);
ok(hr == S_OK, "Could not get ITypeInfo2: %08x\n", hr);
+ memset(&cust_data, 0, sizeof(cust_data));
+ ole_check(ITypeInfo2_GetAllCustData(typeinfo2,&cust_data));
+ expect_int(cust_data.cCustData, ti->cCustData);
+ ClearCustData(&cust_data);
+ for (cust = 0; cust < ti->cCustData; cust++)
+ {
+ GUID guid;
+ parse_guid(ti->custdata[cust].uuid,&guid);
+ /* check that it's possible to search using this uuid */
+ hr = ITypeInfo2_GetCustData(typeinfo2,&guid,&v);
+ ok(hr == S_OK, "GetCustDatafailed: %08x\n", hr);
+ check_variant_info(&v,&ti->custdata[cust].value);
+ VariantClear(&v);
+ }
+
for (func = 0; func < typeattr->cFuncs; func++)
{
const function_info *fn_info = &ti->funcs[func];
@@ -6038,6 +6254,22 @@ static void test_dump_typelib(const WCHAR *name)
expect_int(desc->oVft, fn_info->vtbl_index * sizeof(void*));
expect_int(desc->cScodes, fn_info->cScodes);
expect_int(desc->wFuncFlags, fn_info->wFuncFlags);
+
+ memset(&cust_data, 0, sizeof(cust_data));
+ ole_check(ITypeInfo2_GetAllFuncCustData(typeinfo2,func,&cust_data));
+ expect_int(cust_data.cCustData, fn_info->cCustData);
+ ClearCustData(&cust_data);
+ for (cust = 0; cust < fn_info->cCustData; cust++)
+ {
+ GUID guid;
+ parse_guid(fn_info->custdata[cust].uuid,&guid);
+ /* check that it's possible to search using this uuid */
+ hr = ITypeInfo2_GetFuncCustData(typeinfo2,func,&guid,&v);
+ ok(hr == S_OK, "GetCustDatafailed: %08x\n", hr);
+ check_variant_info(&v,&fn_info->custdata[cust].value);
+ VariantClear(&v);
+ }
+
ole_check(ITypeInfo_GetNames(typeinfo, desc->memid, namesTab, 256, &cNames));
for (i = 0; i < cNames; i++)
{
@@ -6051,6 +6283,21 @@ static void test_dump_typelib(const WCHAR *name)
{
check_type(&desc->lprgelemdescParam[i], &fn_info->params[i]);
+ memset(&cust_data, 0, sizeof(cust_data));
+ ole_check(ITypeInfo2_GetAllParamCustData(typeinfo2,func,i,&cust_data));
+ expect_int(cust_data.cCustData, fn_info->params[i].cCustData);
+ ClearCustData(&cust_data);
+ for (cust = 0; cust < fn_info->params[i].cCustData; cust++)
+ {
+ GUID guid;
+ parse_guid(fn_info->params[i].custdata[cust].uuid,&guid);
+ /* check that it's possible to search using this uuid */
+ hr = ITypeInfo2_GetParamCustData(typeinfo2,func,i,&guid,&v);
+ ok(hr == S_OK, "GetParamCustDatafailed: %08x\n", hr);
+ check_variant_info(&v,&fn_info->params[i].custdata[cust].value);
+ VariantClear(&v);
+ }
+
if (desc->lprgelemdescParam[i].tdesc.vt == VT_USERDEFINED)
{
ITypeInfo *param;
@@ -6080,9 +6327,7 @@ static void test_dump_typelib(const WCHAR *name)
VariantClear(&v);
memset(&cust_data, 0, sizeof(cust_data));
- hr = ITypeInfo2_GetAllCustData(typeinfo2, &cust_data);
ITypeInfo_ReleaseFuncDesc(typeinfo, desc);
- ClearCustData(&cust_data);
}
for (var = 0; var < typeattr->cVars; var++)
@@ -6112,6 +6357,20 @@ static void test_dump_typelib(const WCHAR *name)
} else {
expect_null(desc->DUMMYUNIONNAME.lpvarValue);
}
+ memset(&cust_data, 0, sizeof(cust_data));
+ ole_check(ITypeInfo2_GetAllVarCustData(typeinfo2,var,&cust_data));
+ expect_int(cust_data.cCustData, var_info->cCustData);
+ ClearCustData(&cust_data);
+ for (cust = 0; cust < var_info->cCustData; cust++)
+ {
+ GUID guid;
+ parse_guid(var_info->custdata[cust].uuid,&guid);
+ /* check that it's possible to search using this uuid */
+ hr = ITypeInfo2_GetVarCustData(typeinfo2,var,&guid,&v);
+ ok(hr == S_OK, "GetVarCustData failed: %08x\n", hr);
+ check_variant_info(&v,&var_info->custdata[cust].value);
+ VariantClear(&v);
+ }
check_type(&desc->elemdescVar, &var_info->elemdescVar);
1
0
[PATCH 12/13] oleaut32: Fix error handling/reporting in TLB_copy_all_custdata.
by Puetz Kevin A 07 Aug '20
by Puetz Kevin A 07 Aug '20
07 Aug '20
VariantCopy clears existing contents of pvargDest and thus requires
it contain a valid (possibly-empty) VARIANT, not uninitialized garbage.
If a failure still occurs, propagate the HRESULT to GetAll*CustData.
Signed-off-by: Kevin Puetz <PuetzKevinA(a)JohnDeere.com>
---
dlls/oleaut32/typelib.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index 2f7ce53b1c..6dbd8c39b2 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -5290,6 +5290,7 @@ static HRESULT TLB_copy_all_custdata(const struct list *custdata_list, CUSTDATA
TLBCustData *pCData;
unsigned int ct;
CUSTDATAITEM *cdi;
+ HRESULT hr = S_OK;
ct = list_count(custdata_list);
@@ -5302,11 +5303,13 @@ static HRESULT TLB_copy_all_custdata(const struct list *custdata_list, CUSTDATA
cdi = pCustData->prgCustData;
LIST_FOR_EACH_ENTRY(pCData, custdata_list, TLBCustData, entry){
cdi->guid = *TLB_get_guid_null(pCData->guid);
- VariantCopy(&cdi->varValue, &pCData->data);
+ VariantInit(&cdi->varValue);
+ hr = VariantCopy(&cdi->varValue, &pCData->data);
+ if(FAILED(hr)) break;
++cdi;
}
- return S_OK;
+ return hr;
}
2
1
[PATCH 11/13] widl: Allow adding the same custdata GUID multiple times in a typelib.
by Puetz Kevin A 07 Aug '20
by Puetz Kevin A 07 Aug '20
07 Aug '20
e.g. using the same kind of custdata in multiple interfaces
Signed-off-by: Kevin Puetz <PuetzKevinA(a)JohnDeere.com>
---
tools/widl/write_msft.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/tools/widl/write_msft.c b/tools/widl/write_msft.c
index 87863e25fb..70d123813f 100644
--- a/tools/widl/write_msft.c
+++ b/tools/widl/write_msft.c
@@ -1263,18 +1263,25 @@ static void write_default_value(msft_typelib_t *typelib, type_t *type, expr_t *e
static HRESULT set_custdata(msft_typelib_t *typelib, REFGUID guid,
int vt, const void *value, int *offset)
{
- MSFT_GuidEntry guidentry;
int guidoffset;
int custoffset;
int *custdata;
int data_out;
+ int hash_key;
- guidentry.guid = *guid;
+ hash_key = ctl2_hash_guid(guid);
+ guidoffset = ctl2_find_guid(typelib, hash_key, guid);
+ if(guidoffset == -1) {
+ // add GUID that was not already present
+ MSFT_GuidEntry guidentry;
+ guidentry.guid = *guid;
- guidentry.hreftype = -1;
- guidentry.next_hash = -1;
+ guidentry.hreftype = -1;
+ guidentry.next_hash = -1;
+
+ guidoffset = ctl2_alloc_guid(typelib, &guidentry);
+ }
- guidoffset = ctl2_alloc_guid(typelib, &guidentry);
if(vt == VT_BSTR)
write_string_value(typelib, &data_out, value);
else
2
1
Signed-off-by: Kevin Puetz <PuetzKevinA(a)JohnDeere.com>
---
tools/widl/write_msft.c | 78 ++++++++++++++++++++++++++++++++++++++---
1 file changed, 74 insertions(+), 4 deletions(-)
diff --git a/tools/widl/write_msft.c b/tools/widl/write_msft.c
index 4a3caea0bb..87863e25fb 100644
--- a/tools/widl/write_msft.c
+++ b/tools/widl/write_msft.c
@@ -1291,6 +1291,25 @@ static HRESULT set_custdata(msft_typelib_t *typelib, REFGUID guid,
return S_OK;
}
+static HRESULT set_custdata_attr(msft_typelib_t *typelib, attr_custdata_t *custdata, int *offset)
+{
+ switch(custdata->pval->type) {
+ case EXPR_STRLIT:
+ case EXPR_WSTRLIT:
+ set_custdata(typelib, &custdata->id, VT_BSTR, custdata->pval->u.sval, offset);
+ break;
+ case EXPR_HEXNUM:
+ case EXPR_NUM:
+ set_custdata(typelib, &custdata->id, VT_I4, &custdata->pval->u.lval, offset);
+ break;
+ default:
+ error("custom() attribute with unknown type\n");
+ break;
+ }
+
+ return S_OK;
+}
+
static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, var_t *func, int index)
{
int offset, name_offset;
@@ -1298,12 +1317,14 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, var_t *func, int index)
int i, id, next_idx;
int decoded_size, extra_attr = 0;
int num_params = 0, num_optional = 0, num_defaults = 0;
+ int has_arg_custdata = 0;
var_t *arg;
unsigned char *namedata;
const attr_t *attr;
unsigned int funcflags = 0, callconv = 4 /* CC_STDCALL */;
unsigned int funckind, invokekind = 1 /* INVOKE_FUNC */;
int help_context = 0, help_string_context = 0, help_string_offset = -1;
+ int func_custdata_offset = -1;
int entry = -1, entry_is_ord = 0;
int lcid_retval_count = 0;
@@ -1337,6 +1358,8 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, var_t *func, int index)
num_defaults++;
else if(attr->type == ATTR_OPTIONAL)
num_optional++;
+ else if(attr->type == ATTR_CUSTOM)
+ has_arg_custdata = 1;
}
}
@@ -1350,6 +1373,9 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, var_t *func, int index)
case ATTR_BINDABLE:
funcflags |= 0x4; /* FUNCFLAG_FBINDABLE */
break;
+ case ATTR_CUSTOM:
+ set_custdata_attr(typeinfo->typelib, attr->u.pval, &func_custdata_offset);
+ break;
case ATTR_DEFAULTBIND:
funcflags |= 0x20; /* FUNCFLAG_FDEFAULTBIND */
break;
@@ -1430,6 +1456,10 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, var_t *func, int index)
}
}
+ if(has_arg_custdata || func_custdata_offset != -1) {
+ extra_attr = max(extra_attr, 7 + num_params);
+ }
+
/* allocate type data space for us */
typedata_size = 0x18 + extra_attr * sizeof(int) + (num_params * (num_defaults ? 16 : 12));
@@ -1476,6 +1506,7 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, var_t *func, int index)
typedata[2] = funcflags;
typedata[3] = ((52 /*sizeof(FUNCDESC)*/ + decoded_size) << 16) | typeinfo->typeinfo->cbSizeVft;
typedata[4] = (next_idx << 16) | (callconv << 8) | (invokekind << 3) | funckind;
+ if(has_arg_custdata || func_custdata_offset != -1) typedata[4] |= 0x0080;
if(num_defaults) typedata[4] |= 0x1000;
if(entry_is_ord) typedata[4] |= 0x2000;
typedata[5] = (num_optional << 16) | num_params;
@@ -1486,6 +1517,10 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, var_t *func, int index)
typedata[3] += (24 /*sizeof(PARAMDESCEX)*/ * num_defaults) << 16;
switch(extra_attr) {
+ default:
+ if(extra_attr > 7 + num_params) warning("unknown number of optional attrs\n");
+ /* typedata[13..+num_params] = arg_custdata_offset handled in below loop */
+ case 7: typedata[12] = func_custdata_offset;
case 6: typedata[11] = help_string_context;
case 5: typedata[10] = -1;
case 4: typedata[9] = -1;
@@ -1494,8 +1529,6 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, var_t *func, int index)
case 1: typedata[6] = help_context;
case 0:
break;
- default:
- warning("unknown number of optional attrs\n");
}
if (type_function_get_args(func->declspec.type))
@@ -1506,12 +1539,16 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, var_t *func, int index)
int paramflags = 0;
int *paramdata = typedata + 6 + extra_attr + (num_defaults ? num_params : 0) + i * 3;
int *defaultdata = num_defaults ? typedata + 6 + extra_attr + i : NULL;
+ int arg_custdata_offset = -1;
if(defaultdata) *defaultdata = -1;
encode_var(typeinfo->typelib, arg->declspec.type, arg, paramdata, &decoded_size);
if (arg->attrs) LIST_FOR_EACH_ENTRY( attr, arg->attrs, const attr_t, entry ) {
switch(attr->type) {
+ case ATTR_CUSTOM:
+ set_custdata_attr(typeinfo->typelib, attr->u.pval, &arg_custdata_offset);
+ break;
case ATTR_DEFAULTVALUE:
{
paramflags |= 0x30; /* PARAMFLAG_FHASDEFAULT | PARAMFLAG_FOPT */
@@ -1539,6 +1576,9 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, var_t *func, int index)
chat("unhandled param attr %d\n", attr->type);
break;
}
+ if(extra_attr > 7 + i) {
+ typedata[13+i] = arg_custdata_offset;
+ }
}
paramdata[1] = -1;
paramdata[2] = paramflags;
@@ -1621,6 +1661,7 @@ static HRESULT add_var_desc(msft_typeinfo_t *typeinfo, UINT index, var_t* var)
{
int offset, id;
unsigned int typedata_size;
+ int extra_attr = 0;
INT *typedata;
unsigned int var_datawidth, var_alignment = 0;
int var_type_size, var_kind = 0 /* VAR_PERINSTANCE */;
@@ -1629,6 +1670,7 @@ static HRESULT add_var_desc(msft_typeinfo_t *typeinfo, UINT index, var_t* var)
const attr_t *attr;
unsigned char *namedata;
int var_num = (typeinfo->typeinfo->cElement >> 16) & 0xffff;
+ int var_custdata_offset = -1;
if (!var->name)
var->name = gen_name();
@@ -1643,6 +1685,10 @@ static HRESULT add_var_desc(msft_typeinfo_t *typeinfo, UINT index, var_t* var)
case ATTR_BINDABLE:
varflags |= 0x04; /* VARFLAG_FBINDABLE */
break;
+ case ATTR_CUSTOM:
+ extra_attr = max(extra_attr,4);
+ set_custdata_attr(typeinfo->typelib, attr->u.pval, &var_custdata_offset);
+ break;
case ATTR_DEFAULTBIND:
varflags |= 0x20; /* VARFLAG_FDEFAULTBIND */
break;
@@ -1686,7 +1732,7 @@ static HRESULT add_var_desc(msft_typeinfo_t *typeinfo, UINT index, var_t* var)
}
/* allocate type data space for us */
- typedata_size = 0x14;
+ typedata_size = 0x14 + extra_attr * sizeof(int);
if (!typeinfo->var_data) {
typeinfo->var_data = xmalloc(0x100);
@@ -1762,6 +1808,17 @@ static HRESULT add_var_desc(msft_typeinfo_t *typeinfo, UINT index, var_t* var)
/* add type description size to total required allocation */
typedata[3] += var_type_size << 16 | var_kind;
+ switch(extra_attr) {
+ case 5: typedata[9] = -1 /*help_context*/;
+ case 4: typedata[8] = var_custdata_offset;
+ case 3: typedata[7] = -1;
+ case 2: typedata[6] = -1 /*help_string_offset*/;
+ case 1: typedata[5] = -1 /*help_context*/;
+ break;
+ default:
+ warning("unknown number of optional attrs\n");
+ }
+
/* fix type alignment */
alignment = (typeinfo->typeinfo->typekind >> 11) & 0x1f;
if (alignment < var_alignment) {
@@ -1871,7 +1928,9 @@ static msft_typeinfo_t *create_msft_typeinfo(msft_typelib_t *typelib, enum type_
if (kind == TKIND_COCLASS)
typeinfo->flags |= 0x20; /* TYPEFLAG_FCONTROL */
break;
-
+ case ATTR_CUSTOM:
+ set_custdata_attr(typelib, attr->u.pval, &typeinfo->oCustData);
+ break;
case ATTR_DLLNAME:
{
int offset = ctl2_alloc_string(typelib, attr->u.pval);
@@ -2699,6 +2758,7 @@ int create_msft_typelib(typelib_t *typelib)
msft_typelib_t *msft;
int failed = 0;
const statement_t *stmt;
+ const attr_t *attr;
time_t cur_time;
char *time_override;
unsigned int version = 7 << 24 | 555; /* 7.00.0555 */
@@ -2746,6 +2806,16 @@ int create_msft_typelib(typelib_t *typelib)
set_help_string_dll(msft);
set_help_string_context(msft);
+ if (typelib->attrs) LIST_FOR_EACH_ENTRY( attr, typelib->attrs, const attr_t, entry ) {
+ switch(attr->type) {
+ case ATTR_CUSTOM:
+ set_custdata_attr(msft, attr->u.pval, &msft->typelib_header.CustomDataOffset);
+ break;
+ default:
+ break;
+ }
+ }
+
/* midl adds two sets of custom data to the library: the current unix time
and midl's version number */
time_override = getenv( "WIDL_TIME_OVERRIDE");
2
1