oleaut32: Load GetVarCustData from MSFT-format typelib.

Signed-off-by: Kevin Puetz <PuetzKevinA@JohnDeere.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Kevin Puetz 2020-11-17 19:14:19 -06:00 committed by Alexandre Julliard
parent cd38abc455
commit 65d917402f
3 changed files with 200 additions and 1 deletions

View File

@ -26,7 +26,15 @@ import "oaidl.idl"; /* needed by widl */
midl_pragma warning ( disable : 2368 ) midl_pragma warning ( disable : 2368 )
[uuid(8b05fe77-4a6c-4133-b9cd-8f81747af784)] #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 library Test
{ {
importlib("stdole2.tlb"); importlib("stdole2.tlb");
@ -170,4 +178,44 @@ library Test
{ {
interface ITestDispDual; 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 {
[custom(CUSTDATA_STRLIT,"ITypeInfo2::GetVarCustData 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")]
void test_method([in,custom(CUSTDATA_STRLIT,"ITypeInfo2::GetParamCustData test_dispatch::test_method(x)")] int x);
}
} }

View File

@ -6130,6 +6130,154 @@ static const type_info info[] = {
}, },
}, },
{ /* vars */ }, { /* 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*/ 1, {
{ "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetVarCustData enum" } } },
},
{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 */
},
},
} }
}; };

View File

@ -2599,6 +2599,9 @@ static void MSFT_DoVars(TLBContext *pcx, ITypeInfoImpl *pTI, int cFuncs,
if(reclength > FIELD_OFFSET(MSFT_VarRecord, HelpString)) if(reclength > FIELD_OFFSET(MSFT_VarRecord, HelpString))
ptvd->HelpString = MSFT_ReadString(pcx, pVarRec->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)) if(reclength > FIELD_OFFSET(MSFT_VarRecord, HelpStringContext))
ptvd->HelpStringContext = pVarRec->HelpStringContext; ptvd->HelpStringContext = pVarRec->HelpStringContext;