Wine-Devel
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 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
- 7 participants
- 84546 discussions
[PATCH 07/13] oleaut32/tests: Cover Get*CustData in test_dump_typelib.
by Puetz Kevin A Aug. 7, 2020
by Puetz Kevin A Aug. 7, 2020
Aug. 7, 2020
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 Aug. 7, 2020
by Puetz Kevin A Aug. 7, 2020
Aug. 7, 2020
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 Aug. 7, 2020
by Puetz Kevin A Aug. 7, 2020
Aug. 7, 2020
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 Aug. 7, 2020
by Puetz Kevin A Aug. 7, 2020
Aug. 7, 2020
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
Signed-off-by: Kevin Puetz <PuetzKevinA(a)JohnDeere.com>
---
tools/widl/parser.l | 2 +-
tools/widl/parser.y | 18 ++++++++++++++++++
tools/widl/widltypes.h | 7 +++++++
3 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/tools/widl/parser.l b/tools/widl/parser.l
index 3cbf4ff2d2..e163bd5d6f 100644
--- a/tools/widl/parser.l
+++ b/tools/widl/parser.l
@@ -337,6 +337,7 @@ static const struct keyword attr_keywords[] =
{"context_handle_noserialize", tCONTEXTHANDLENOSERIALIZE},
{"context_handle_serialize", tCONTEXTHANDLENOSERIALIZE},
{"control", tCONTROL},
+ {"custom", tCUSTOM},
{"decode", tDECODE},
{"defaultbind", tDEFAULTBIND},
{"defaultcollelem", tDEFAULTCOLLELEM},
@@ -427,7 +428,6 @@ static const struct keyword attr_keywords[] =
};
/* attributes TODO:
- custom
first_is
last_is
max_is
diff --git a/tools/widl/parser.y b/tools/widl/parser.y
index 3ef8d89ba1..c50880a7f1 100644
--- a/tools/widl/parser.y
+++ b/tools/widl/parser.y
@@ -58,6 +58,7 @@ static decl_spec_t *make_decl_spec(type_t *type, decl_spec_t *left, decl_spec_t
static attr_t *make_attr(enum attr_type type);
static attr_t *make_attrv(enum attr_type type, unsigned int val);
static attr_t *make_attrp(enum attr_type type, void *val);
+static attr_t *make_custom_attr(UUID *id, expr_t *pval);
static expr_list_t *append_expr(expr_list_t *list, expr_t *expr);
static var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, declarator_t *decl, int top);
static var_list_t *set_var_types(attr_list_t *attrs, decl_spec_t *decl_spec, declarator_list_t *decls);
@@ -173,6 +174,7 @@ static typelib_t *current_typelib;
%token tCALLAS tCALLBACK tCASE tCDECL tCHAR tCOCLASS tCODE tCOMMSTATUS
%token tCONST tCONTEXTHANDLE tCONTEXTHANDLENOSERIALIZE
%token tCONTEXTHANDLESERIALIZE tCONTROL tCPPQUOTE
+%token tCUSTOM
%token tDECODE tDEFAULT tDEFAULTBIND
%token tDEFAULTCOLLELEM
%token tDEFAULTVALUE
@@ -501,6 +503,7 @@ attribute: { $$ = NULL; }
| tCONTEXTHANDLENOSERIALIZE { $$ = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ }
| tCONTEXTHANDLESERIALIZE { $$ = make_attrv(ATTR_CONTEXTHANDLE, 0); /* RPC_CONTEXT_HANDLE_SERIALIZE */ }
| tCONTROL { $$ = make_attr(ATTR_CONTROL); }
+ | tCUSTOM '(' uuid_string ',' expr_const ')' { $$ = make_custom_attr($3, $5); }
| tDECODE { $$ = make_attr(ATTR_DECODE); }
| tDEFAULT { $$ = make_attr(ATTR_DEFAULT); }
| tDEFAULTBIND { $$ = make_attr(ATTR_DEFAULTBIND); }
@@ -1211,6 +1214,8 @@ static attr_list_t *append_attr(attr_list_t *list, attr_t *attr)
list = xmalloc( sizeof(*list) );
list_init( list );
}
+ if(attr->type != ATTR_CUSTOM)
+ {
LIST_FOR_EACH_ENTRY(attr_existing, list, attr_t, entry)
if (attr_existing->type == attr->type)
{
@@ -1219,6 +1224,7 @@ static attr_list_t *append_attr(attr_list_t *list, attr_t *attr)
list_remove(&attr_existing->entry);
break;
}
+ }
list_add_tail( list, &attr->entry );
return list;
}
@@ -1343,6 +1349,17 @@ static attr_t *make_attrp(enum attr_type type, void *val)
return a;
}
+static attr_t *make_custom_attr(UUID *id, expr_t *pval)
+{
+ attr_t *a = xmalloc(sizeof(attr_t));
+ attr_custdata_t *cstdata = xmalloc(sizeof(attr_custdata_t));
+ a->type = ATTR_CUSTOM;
+ cstdata->id = *id;
+ cstdata->pval = pval;
+ a->u.pval = cstdata;
+ return a;
+}
+
static expr_list_t *append_expr(expr_list_t *list, expr_t *expr)
{
if (!expr) return list;
@@ -2091,6 +2108,7 @@ struct allowed_attr allowed_attr[] =
/* ATTR_COMMSTATUS */ { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, "comm_status" },
/* ATTR_CONTEXTHANDLE */ { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "context_handle" },
/* ATTR_CONTROL */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, "control" },
+ /* ATTR_CUSTOM */ { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, "custom" },
/* ATTR_DECODE */ { 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, "decode" },
/* ATTR_DEFAULT */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, "default" },
/* ATTR_DEFAULTBIND */ { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "defaultbind" },
diff --git a/tools/widl/widltypes.h b/tools/widl/widltypes.h
index 085a0ff55f..6b67538594 100644
--- a/tools/widl/widltypes.h
+++ b/tools/widl/widltypes.h
@@ -37,6 +37,7 @@ typedef GUID UUID;
typedef struct _loc_info_t loc_info_t;
typedef struct _attr_t attr_t;
+typedef struct _attr_custdata_t attr_custdata_t;
typedef struct _expr_t expr_t;
typedef struct _type_t type_t;
typedef struct _var_t var_t;
@@ -83,6 +84,7 @@ enum attr_type
ATTR_COMMSTATUS,
ATTR_CONTEXTHANDLE,
ATTR_CONTROL,
+ ATTR_CUSTOM,
ATTR_DECODE,
ATTR_DEFAULT,
ATTR_DEFAULTBIND,
@@ -337,6 +339,11 @@ struct _expr_t {
struct list entry;
};
+struct _attr_custdata_t {
+ GUID id;
+ expr_t *pval;
+};
+
struct struct_details
{
var_list_t *fields;
2
1
Aug. 7, 2020
Per standard, ctime already ends with '\n\0', so this doubled it.
Signed-off-by: Kevin Puetz <PuetzKevinA(a)JohnDeere.com>
---
This patch should not be essential to the series
It's only that the doubled '\n' changed the size of the string,
when then also changed all of the offsets of following custdata.
Which made comparisons to existing .tlb files annoying, so I fixed it.
---
tools/widl/write_msft.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/widl/write_msft.c b/tools/widl/write_msft.c
index 5e21155761..4a3caea0bb 100644
--- a/tools/widl/write_msft.c
+++ b/tools/widl/write_msft.c
@@ -2750,7 +2750,7 @@ int create_msft_typelib(typelib_t *typelib)
and midl's version number */
time_override = getenv( "WIDL_TIME_OVERRIDE");
cur_time = time_override ? atol( time_override) : time(NULL);
- sprintf(info_string, "Created by WIDL version %s at %s\n", PACKAGE_VERSION, ctime(&cur_time));
+ sprintf(info_string, "Created by WIDL version %s at %s", PACKAGE_VERSION, ctime(&cur_time));
set_custdata(msft, &midl_info_guid, VT_BSTR, info_string, &msft->typelib_header.CustomDataOffset);
set_custdata(msft, &midl_time_guid, VT_UI4, &cur_time, &msft->typelib_header.CustomDataOffset);
set_custdata(msft, &midl_version_guid, VT_UI4, &version, &msft->typelib_header.CustomDataOffset);
2
1
Signed-off-by: Kevin Puetz <PuetzKevinA(a)JohnDeere.com>
---
This was just writing the 0x55555555 from xmalloc
The field seems to be unused for VAR_DISPATCH,
but was 0 in the typelibs I had to check (which seems reasonable)
---
tools/widl/write_msft.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/tools/widl/write_msft.c b/tools/widl/write_msft.c
index 7cfe9e146c..5e21155761 100644
--- a/tools/widl/write_msft.c
+++ b/tools/widl/write_msft.c
@@ -1751,6 +1751,7 @@ static HRESULT add_var_desc(msft_typeinfo_t *typeinfo, UINT index, var_t* var)
break;
case TKIND_DISPATCH:
var_kind = 3; /* VAR_DISPATCH */
+ typedata[4] = 0;
typeinfo->datawidth = pointer_size;
break;
default:
1
0
Aug. 7, 2020
A NULL expected value is always a test failure, but printing
the unexpected "wrong" value is more helpful than crashing.
Signed-off-by: Kevin Puetz <PuetzKevinA(a)JohnDeere.com>
---
I hit this when I had broken the info[] generator, which is of course
fixed, but but it seems worth fixing to not just crash
(strcmp doesn't like NULL)
---
dlls/oleaut32/tests/typelib.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c
index 3d5aeb0a26..6f68a201ba 100644
--- a/dlls/oleaut32/tests/typelib.c
+++ b/dlls/oleaut32/tests/typelib.c
@@ -53,7 +53,7 @@
{ \
CHAR buf[260]; \
expect_eq(!WideCharToMultiByte(CP_ACP, 0, (expr), -1, buf, 260, NULL, NULL), 0, int, "%d"); \
- ok(strcmp(value, buf) == 0, #expr " expected \"%s\" got \"%s\"\n", value, buf); \
+ ok(value && strcmp(value, buf) == 0, #expr " expected \"%s\" got \"%s\"\n", value, buf); \
}
#define ole_expect(expr, expect) { \
1
0
Aug. 7, 2020
Always print initializer for funcs[] array, even when empty
Signed-off-by: Kevin Puetz <PuetzKevinA(a)JohnDeere.com>
---
This is preparation for having additional arrays (e.g. vars[], custdata[])
which can each independently be empty (or not)
---
dlls/oleaut32/tests/typelib.c | 99 ++++++++++++++++++++++-------------
1 file changed, 62 insertions(+), 37 deletions(-)
diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c
index a8cb966f33..3d5aeb0a26 100644
--- a/dlls/oleaut32/tests/typelib.c
+++ b/dlls/oleaut32/tests/typelib.c
@@ -4301,15 +4301,13 @@ 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",
+ " /*helpctx*/ 0x%04x, /*version*/ 0x%08x, /*#vtbl*/ %d, /*#func*/ %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);
- if (attr->cFuncs) printf(",\n {\n");
- else printf("\n");
-
+ printf(" { /* funcs */%s", attr->cFuncs ? "\n" : " },\n");
while (1)
{
FUNCDESC *desc;
@@ -4404,14 +4402,15 @@ 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,
+ { /* funcs */ },
},
{
"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,
- {
+ { /* funcs */
{
/*id*/ 0x60010000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ 0,
@@ -4433,7 +4432,7 @@ 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,
- {
+ { /* funcs */
{
/*id*/ 0x60010000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ 0,
@@ -4455,7 +4454,7 @@ 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,
- {
+ { /* funcs */
{
/*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 4, /*#scodes*/ 0, /*flags*/ 0,
@@ -4474,44 +4473,50 @@ static const type_info info[] = {
"_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,
+ { /* funcs */ },
},
{
"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,
+ { /* funcs */ },
},
{
"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,
+ { /* funcs */ },
},
{
"_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,
+ { /* funcs */ },
},
{
"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,
+ { /* funcs */ },
},
{
"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,
+ { /* funcs */ },
},
{
"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,
- {
+ { /* funcs */
{
/*id*/ 0x60000000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 2, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
@@ -4653,7 +4658,7 @@ 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,
- {
+ { /* funcs */
{
/*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
@@ -4672,128 +4677,148 @@ static const type_info info[] = {
"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,
+ { /* funcs */ },
},
{
"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,
+ { /* funcs */ },
},
{
"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,
+ { /* funcs */ },
},
{
"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,
+ { /* funcs */ },
},
{
"_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,
+ { /* funcs */ },
},
{
"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,
+ { /* funcs */ },
},
{
"_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,
+ { /* funcs */ },
},
{
"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,
+ { /* funcs */ },
},
{
"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,
+ { /* funcs */ },
},
{
"_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,
+ { /* funcs */ },
},
{
"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,
+ { /* funcs */ },
},
{
"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,
+ { /* funcs */ },
},
{
"_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,
+ { /* funcs */ },
},
{
"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,
+ { /* funcs */ },
},
{
"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,
+ { /* funcs */ },
},
{
"_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,
+ { /* funcs */ },
},
{
"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,
+ { /* funcs */ },
},
{
"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,
+ { /* funcs */ },
},
{
"_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,
+ { /* funcs */ },
},
{
"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,
+ { /* funcs */ },
},
{
"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,
- {
+ { /* funcs */
{
/*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
1
0