Signed-off-by: Kevin Puetz PuetzKevinA@JohnDeere.com --- dlls/oleaut32/tests/test_tlb.idl | 51 +++++++++- dlls/oleaut32/tests/typelib.c | 168 +++++++++++++++++++++++++++++++ dlls/oleaut32/typelib.c | 3 + 3 files changed, 221 insertions(+), 1 deletion(-)
diff --git a/dlls/oleaut32/tests/test_tlb.idl b/dlls/oleaut32/tests/test_tlb.idl index b8fecc9a01..251897c91e 100644 --- a/dlls/oleaut32/tests/test_tlb.idl +++ b/dlls/oleaut32/tests/test_tlb.idl @@ -26,7 +26,17 @@ import "oaidl.idl"; /* needed by widl */
midl_pragma warning ( disable : 2368 )
-[uuid(8b05fe77-4a6c-4133-b9cd-8f81747af784)] +#define CUSTDATA_BSTR c8768723-e6d2-4442-b039-92e9c82429c4 + +#define CUSTDATA_STRLIT c8768723-e6d2-4442-b039-92e9c82429c4 +#define CUSTDATA_NUM b481b478-a181-4eb6-b6e0-df63069e8c80 +#define CUSTDATA_HEXNUM a09d7c06-cf38-4db3-9450-10641651c35b + +[uuid(8b05fe77-4a6c-4133-b9cd-8f81747af784), +custom(CUSTDATA_STRLIT,"ITypeLib2::GetCustData"), +custom(CUSTDATA_NUM,42), +custom(CUSTDATA_HEXNUM,0x1337C0D3), +] library Test { importlib("stdole2.tlb"); @@ -170,4 +180,43 @@ library Test { interface ITestDispDual; } + + [uuid(786ee4ff-c5dd-4bf4-9578-0d22fb5369cc),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetCustData interface")] + interface custdata_interface : IDispatch + { + [custom(CUSTDATA_STRLIT,"ITypeInfo2::GetFuncCustData custdata_interface::test_method")] + HRESULT test_method([in,custom(CUSTDATA_STRLIT,"ITypeInfo2::GetParamCustData custdata_interface::test_method(x)")] int x); + } + + [uuid(6ca99f5e-c86a-42ad-a5ee-5bd4c8e5553c),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetCustData enum")] + enum custdata_enum { + One, Two + }; + + [uuid(62fabe17-f733-4b09-b859-3f455dcda450),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetCustData struct")] + struct custdata_struct { + [custom(CUSTDATA_STRLIT,"ITypeInfo2::GetVarCustData struct")] + int test_field; + }; + + [/* uuid(...) not allowed on union */ custom(CUSTDATA_STRLIT,"ITypeInfo2::GetCustData union")] + union custdata_union { + [custom(CUSTDATA_STRLIT,"ITypeInfo2::GetVarCustData union")] + int test_field; + }; + + [public,uuid(d58744d6-63f9-467c-87e5-c95158098b18),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetCustData typedef")] + typedef custdata_interface * custdata_typedef; + + [uuid(bffc216e-2159-465a-80df-b85fd4f4f122),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetCustData dispinterface")] + dispinterface custdata_dispatch + { +properties: + [id(0),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetVarCustData dispinterface property")] + int test_property; +methods: + [id(1),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetFuncCustData dispinterface method")] + // FIXME: if the custom strings were identical, midl would de-duplicate them; widl writes them twice. + void test_method([in,custom(CUSTDATA_STRLIT,"ITypeInfo2::GetParamCustData test_dispatch::test_method(x)")] int x); + } } diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c index 2891e75689..66b9f7f25a 100644 --- a/dlls/oleaut32/tests/typelib.c +++ b/dlls/oleaut32/tests/typelib.c @@ -4909,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} }, @@ -5551,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}, @@ -5572,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} }, @@ -5584,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} }, @@ -5596,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} @@ -5610,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}, @@ -5628,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}, @@ -5650,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}, @@ -5678,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} }, @@ -5690,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} }, @@ -5702,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} }, @@ -5714,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} }, @@ -5726,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} }, @@ -5738,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} }, @@ -5750,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} @@ -5768,6 +5785,7 @@ 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, @@ -5929,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} @@ -5943,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}, @@ -5961,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}, @@ -5983,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}, @@ -6102,6 +6124,152 @@ static const type_info info[] = { }, }, { /* vars */ }, +}, +{ + "custdata_interface", + "{786ee4ff-c5dd-4bf4-9578-0d22fb5369cc}", + /*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(custdata_interface*), /*size*/ sizeof(custdata_interface*), + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 8, /*#func*/ 1, /*#var*/ 0, + /*#custdata*/ 1, { + { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetCustData interface" } } }, + }, + { /* funcs */ + { + /*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0, + {VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */ + /*#custdata*/ 1, { + { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetFuncCustData custdata_interface::test_method" } } }, + }, + { /* params */ + {VT_INT, -1, PARAMFLAG_FIN, /*#custdata*/ 1, { + { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetParamCustData custdata_interface::test_method(x)" } } }, + } }, + {-1, 0, 0} + }, + { /* names */ + "test_method", + "x", + NULL, + }, + }, + }, + { /* vars */ }, +}, +{ + "custdata_enum", + "{6ca99f5e-c86a-42ad-a5ee-5bd4c8e5553c}", + /*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4, + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2, + /*#custdata*/ 1, { + { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetCustData enum" } } }, + }, + { /* funcs */ }, + { /* vars */ + { + /*id*/ 0x40000000, /*name*/ "One", /*flags*/ 0, /*kind*/ VAR_CONST, + { .varValue = { VT_I4, { .value_int = 0 } } }, + /*#custdata*/ 0, {}, + {VT_INT, -1, PARAMFLAG_NONE}, /* ret */ + }, + { + /*id*/ 0x40000001, /*name*/ "Two", /*flags*/ 0, /*kind*/ VAR_CONST, + { .varValue = { VT_I4, { .value_int = 1 } } }, + /*#custdata*/ 0, {}, + {VT_INT, -1, PARAMFLAG_NONE}, /* ret */ + }, + }, +}, +{ + "custdata_struct", + "{62fabe17-f733-4b09-b859-3f455dcda450}", + /*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct custdata_struct), /*size*/ sizeof(struct custdata_struct), + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1, + /*#custdata*/ 1, { + { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetCustData struct" } } }, + }, + { /* funcs */ }, + { /* vars */ + { + /*id*/ 0x40000000, /*name*/ "test_field", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE, + { .oInst = 0 }, + /*#custdata*/ 1, { + { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetVarCustData struct" } } }, + }, + {VT_INT, -1, PARAMFLAG_NONE}, /* ret */ + }, + }, +}, +{ + "custdata_union", + "{00000000-0000-0000-0000-000000000000}", + /*kind*/ TKIND_UNION, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(union custdata_union), /*size*/ sizeof(union custdata_union), + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1, + /*#custdata*/ 1, { + { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetCustData union" } } }, + }, + { /* funcs */ }, + { /* vars */ + { + /*id*/ 0x40000000, /*name*/ "test_field", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE, + { .oInst = 0 }, + /*#custdata*/ 1, { + { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetVarCustData union" } } }, + }, + {VT_INT, -1, PARAMFLAG_NONE}, /* ret */ + }, + }, +}, +{ + "custdata_typedef", + "{d58744d6-63f9-467c-87e5-c95158098b18}", + /*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(custdata_typedef), /*size*/ sizeof(custdata_typedef), + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0, + /*#custdata*/ 1, { + { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetCustData typedef" } } }, + }, + { /* funcs */ }, + { /* vars */ }, +}, +{ + "custdata_dispatch", + "{bffc216e-2159-465a-80df-b85fd4f4f122}", + /*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(custdata_dispatch*), /*size*/ sizeof(custdata_dispatch*), + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 7, /*#func*/ 1, /*#var*/ 1, + /*#custdata*/ 1, { + { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetCustData dispinterface" } } }, + }, + { /* funcs */ + { + /*id*/ 0x1, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0, + {VT_VOID, -1, PARAMFLAG_NONE}, /* ret */ + /*#custdata*/ 1, { + { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetFuncCustData dispinterface method" } } }, + }, + { /* params */ + {VT_INT, -1, PARAMFLAG_FIN, /*#custdata*/ 1, { + { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetParamCustData test_dispatch::test_method(x)" } } }, + } }, + {-1, 0, 0} + }, + { /* names */ + "test_method", + "x", + NULL, + }, + }, + }, + { /* vars */ + { + /*id*/ 0x0, /*name*/ "test_property", /*flags*/ 0, /*kind*/ VAR_DISPATCH, + { /* DUMMYUNIONNAME unused*/ }, + /*#custdata*/ 1, { + { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetVarCustData dispinterface property" } } }, + }, + {VT_INT, -1, PARAMFLAG_NONE}, /* ret */ + }, + }, } };
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c index 6dbd8c39b2..99181e206e 100644 --- a/dlls/oleaut32/typelib.c +++ b/dlls/oleaut32/typelib.c @@ -2600,6 +2600,9 @@ static void MSFT_DoVars(TLBContext *pcx, ITypeInfoImpl *pTI, int cFuncs, if(reclength > FIELD_OFFSET(MSFT_VarRecord, HelpString)) ptvd->HelpString = MSFT_ReadString(pcx, pVarRec->HelpString);
+ if (reclength > FIELD_OFFSET(MSFT_VarRecord, oCustData)) + MSFT_CustData(pcx, pVarRec->oCustData, &ptvd->custdata_list); + if(reclength > FIELD_OFFSET(MSFT_VarRecord, HelpStringContext)) ptvd->HelpStringContext = pVarRec->HelpStringContext;
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=76631
Your paranoid android.
=== w2008s64 (64 bit report) ===
oleaut32: typelib.c:6500: Test failed: desc->u.oInst expected 12 got 16 typelib.c:6500: Test failed: desc->u.oInst expected 12 got 16 typelib.c:6500: Test failed: desc->u.oInst expected 4 got 8 typelib.c:6500: Test failed: desc->u.oInst expected 4 got 8
=== w864 (64 bit report) ===
oleaut32: typelib.c:6500: Test failed: desc->u.oInst expected 12 got 16 typelib.c:6500: Test failed: desc->u.oInst expected 12 got 16 typelib.c:6500: Test failed: desc->u.oInst expected 4 got 8 typelib.c:6500: Test failed: desc->u.oInst expected 4 got 8
=== w1064v1507 (64 bit report) ===
oleaut32: typelib.c:6500: Test failed: desc->u.oInst expected 12 got 16 typelib.c:6500: Test failed: desc->u.oInst expected 12 got 16 typelib.c:6500: Test failed: desc->u.oInst expected 4 got 8 typelib.c:6500: Test failed: desc->u.oInst expected 4 got 8
=== w1064v1809 (64 bit report) ===
oleaut32: typelib.c:6500: Test failed: desc->u.oInst expected 12 got 16 typelib.c:6500: Test failed: desc->u.oInst expected 12 got 16 typelib.c:6500: Test failed: desc->u.oInst expected 4 got 8 typelib.c:6500: Test failed: desc->u.oInst expected 4 got 8