oleaut32: Implement ITypeInfo2::ReleaseFuncDesc.

This commit is contained in:
Andrew Eikum 2010-08-20 14:58:53 -05:00 committed by Alexandre Julliard
parent bd6bc3dd04
commit 3f13a07b47
1 changed files with 35 additions and 1 deletions

View File

@ -3540,6 +3540,19 @@ static HRESULT WINAPI ITypeInfo2_fnGetContainingTypeLib(
return S_OK;
}
static void release_typedesc(TYPEDESC *tdesc)
{
while (tdesc) {
TYPEDESC *next;
if (tdesc->vt == VT_USERDEFINED)
next = NULL;
else
next = tdesc->u.lptdesc;
HeapFree(GetProcessHeap(), 0, tdesc);
tdesc = next;
}
}
/******************************************************************************
* ITypeInfo2_ReleaseTypeAttr {OLEAUT32}
*
@ -3563,7 +3576,28 @@ static void WINAPI ITypeInfo2_fnReleaseFuncDesc(
ITypeInfo2* iface,
FUNCDESC* pFuncDesc)
{
FIXME("(%p,%p), stub!\n", iface, pFuncDesc);
int i;
TRACE("(%p,%p)\n", iface, pFuncDesc);
HeapFree(GetProcessHeap(), 0, pFuncDesc->lprgscode);
if (pFuncDesc->lprgelemdescParam) {
for (i = 0; i < pFuncDesc->cParams; ++i) {
if (pFuncDesc->lprgelemdescParam[i].tdesc.vt != VT_USERDEFINED)
release_typedesc(pFuncDesc->lprgelemdescParam[i].tdesc.u.lptdesc);
HeapFree(GetProcessHeap(), 0, pFuncDesc->lprgelemdescParam[i].u.paramdesc.pparamdescex);
}
HeapFree(GetProcessHeap(), 0, pFuncDesc->lprgelemdescParam);
}
HeapFree(GetProcessHeap(), 0, pFuncDesc->elemdescFunc.u.paramdesc.pparamdescex);
if (pFuncDesc->elemdescFunc.tdesc.vt != VT_USERDEFINED)
release_typedesc(pFuncDesc->elemdescFunc.tdesc.u.lptdesc);
HeapFree(GetProcessHeap(), 0, pFuncDesc);
}
/******************************************************************************