oleaut32: Handle TKIND_ALIAS properly when passed as pointer.
This commit is contained in:
parent
6f14ba7387
commit
c978bbee87
|
@ -698,11 +698,24 @@ serialize_param(
|
||||||
}
|
}
|
||||||
ITypeInfo_GetTypeAttr(tinfo2,&tattr);
|
ITypeInfo_GetTypeAttr(tinfo2,&tattr);
|
||||||
switch (tattr->typekind) {
|
switch (tattr->typekind) {
|
||||||
|
case TKIND_ALIAS:
|
||||||
|
if (tattr->tdescAlias.vt == VT_USERDEFINED)
|
||||||
|
{
|
||||||
|
DWORD href = tattr->tdescAlias.u.hreftype;
|
||||||
|
ITypeInfo_ReleaseTypeAttr(tinfo, tattr);
|
||||||
|
ITypeInfo_Release(tinfo2);
|
||||||
|
hres = ITypeInfo_GetRefTypeInfo(tinfo,href,&tinfo2);
|
||||||
|
if (hres) {
|
||||||
|
ERR("Could not get typeinfo of hreftype %x for VT_USERDEFINED.\n",tdesc->u.lptdesc->u.hreftype);
|
||||||
|
return hres;
|
||||||
|
}
|
||||||
|
ITypeInfo_GetTypeAttr(tinfo2,&tattr);
|
||||||
|
derefhere = (tattr->typekind != TKIND_DISPATCH && tattr->typekind != TKIND_INTERFACE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case TKIND_ENUM: /* confirmed */
|
case TKIND_ENUM: /* confirmed */
|
||||||
case TKIND_RECORD: /* FIXME: mostly untested */
|
case TKIND_RECORD: /* FIXME: mostly untested */
|
||||||
derefhere=TRUE;
|
|
||||||
break;
|
break;
|
||||||
case TKIND_ALIAS: /* FIXME: untested */
|
|
||||||
case TKIND_DISPATCH: /* will be done in VT_USERDEFINED case */
|
case TKIND_DISPATCH: /* will be done in VT_USERDEFINED case */
|
||||||
case TKIND_INTERFACE: /* will be done in VT_USERDEFINED case */
|
case TKIND_INTERFACE: /* will be done in VT_USERDEFINED case */
|
||||||
derefhere=FALSE;
|
derefhere=FALSE;
|
||||||
|
@ -1030,11 +1043,24 @@ deserialize_param(
|
||||||
}
|
}
|
||||||
ITypeInfo_GetTypeAttr(tinfo2,&tattr);
|
ITypeInfo_GetTypeAttr(tinfo2,&tattr);
|
||||||
switch (tattr->typekind) {
|
switch (tattr->typekind) {
|
||||||
|
case TKIND_ALIAS:
|
||||||
|
if (tattr->tdescAlias.vt == VT_USERDEFINED)
|
||||||
|
{
|
||||||
|
DWORD href = tattr->tdescAlias.u.hreftype;
|
||||||
|
ITypeInfo_ReleaseTypeAttr(tinfo, tattr);
|
||||||
|
ITypeInfo_Release(tinfo2);
|
||||||
|
hres = ITypeInfo_GetRefTypeInfo(tinfo,href,&tinfo2);
|
||||||
|
if (hres) {
|
||||||
|
ERR("Could not get typeinfo of hreftype %x for VT_USERDEFINED.\n",tdesc->u.lptdesc->u.hreftype);
|
||||||
|
return hres;
|
||||||
|
}
|
||||||
|
ITypeInfo_GetTypeAttr(tinfo2,&tattr);
|
||||||
|
derefhere = (tattr->typekind != TKIND_DISPATCH && tattr->typekind != TKIND_INTERFACE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case TKIND_ENUM: /* confirmed */
|
case TKIND_ENUM: /* confirmed */
|
||||||
case TKIND_RECORD: /* FIXME: mostly untested */
|
case TKIND_RECORD: /* FIXME: mostly untested */
|
||||||
derefhere=TRUE;
|
|
||||||
break;
|
break;
|
||||||
case TKIND_ALIAS: /* FIXME: untested */
|
|
||||||
case TKIND_DISPATCH: /* will be done in VT_USERDEFINED case */
|
case TKIND_DISPATCH: /* will be done in VT_USERDEFINED case */
|
||||||
case TKIND_INTERFACE: /* will be done in VT_USERDEFINED case */
|
case TKIND_INTERFACE: /* will be done in VT_USERDEFINED case */
|
||||||
derefhere=FALSE;
|
derefhere=FALSE;
|
||||||
|
|
Loading…
Reference in New Issue