Robert Shearman : oleaut32:
Resolve referenced types for return values as well as parameters in
MSFT typelibs .
Alexandre Julliard
julliard at wine.codeweavers.com
Wed May 31 08:56:40 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: 983ad4accd2bcbf53dc32d53fd92538ac09d9467
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=983ad4accd2bcbf53dc32d53fd92538ac09d9467
Author: Robert Shearman <rob at codeweavers.com>
Date: Wed May 31 12:20:31 2006 +0100
oleaut32: Resolve referenced types for return values as well as parameters in MSFT typelibs.
---
dlls/oleaut32/typelib.c | 57 +++++++++++++++++++++++++----------------------
1 files changed, 30 insertions(+), 27 deletions(-)
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index 27cfdd5..25a5354 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -1643,6 +1643,34 @@ static void MSFT_GetTdesc(TLBContext *pc
TRACE_(typelib)("vt type = %X\n", pTd->vt);
}
+static void MSFT_ResolveReferencedTypes(TLBContext *pcx, ITypeInfoImpl *pTI, TYPEDESC *lpTypeDesc)
+{
+ /* resolve referenced type if any */
+ while (lpTypeDesc)
+ {
+ switch (lpTypeDesc->vt)
+ {
+ case VT_PTR:
+ lpTypeDesc = lpTypeDesc->u.lptdesc;
+ break;
+
+ case VT_CARRAY:
+ lpTypeDesc = & (lpTypeDesc->u.lpadesc->tdescElem);
+ break;
+
+ case VT_USERDEFINED:
+ MSFT_DoRefType(pcx, pTI,
+ lpTypeDesc->u.hreftype);
+
+ lpTypeDesc = NULL;
+ break;
+
+ default:
+ lpTypeDesc = NULL;
+ }
+ }
+}
+
static void
MSFT_DoFuncs(TLBContext* pcx,
ITypeInfoImpl* pTI,
@@ -1764,6 +1792,7 @@ MSFT_DoFuncs(TLBContext* pcx,
pFuncRec->DataType,
&(*pptfd)->funcdesc.elemdescFunc.tdesc,
pTI);
+ MSFT_ResolveReferencedTypes(pcx, pTI, &(*pptfd)->funcdesc.elemdescFunc.tdesc);
/* do the parameters/arguments */
if(pFuncRec->nrargs)
@@ -1782,7 +1811,6 @@ MSFT_DoFuncs(TLBContext* pcx,
for ( j = 0 ; j < pFuncRec->nrargs ; j++ )
{
- TYPEDESC *lpArgTypeDesc;
ELEMDESC *elemdesc = &(*pptfd)->funcdesc.lprgelemdescParam[j];
MSFT_GetTdesc(pcx,
@@ -1803,32 +1831,7 @@ MSFT_DoFuncs(TLBContext* pcx,
MSFT_ReadName( pcx, paraminfo.oName );
TRACE_(typelib)("param[%d] = %s\n", j, debugstr_w((*pptfd)->pParamDesc[j].Name));
- lpArgTypeDesc = &elemdesc->tdesc;
-
- /* resolve referenced type if any */
- while ( lpArgTypeDesc != NULL )
- {
- switch ( lpArgTypeDesc->vt )
- {
- case VT_PTR:
- lpArgTypeDesc = lpArgTypeDesc->u.lptdesc;
- break;
-
- case VT_CARRAY:
- lpArgTypeDesc = & (lpArgTypeDesc->u.lpadesc->tdescElem);
- break;
-
- case VT_USERDEFINED:
- MSFT_DoRefType(pcx, pTI,
- lpArgTypeDesc->u.hreftype);
-
- lpArgTypeDesc = NULL;
- break;
-
- default:
- lpArgTypeDesc = NULL;
- }
- }
+ MSFT_ResolveReferencedTypes(pcx, pTI, &elemdesc->tdesc);
/* default value */
if ( (elemdesc->u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT) &&
More information about the wine-cvs
mailing list