Huw Davies : oleaut32: Implement GetTypeAttr_Proxy and friends.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri May 5 12:10:20 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: 32a626fdbdd70a3bbc9c7622317683ddb17aa1e6
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=32a626fdbdd70a3bbc9c7622317683ddb17aa1e6
Author: Huw Davies <huw at codeweavers.com>
Date: Fri Apr 28 14:42:43 2006 +0100
oleaut32: Implement GetTypeAttr_Proxy and friends.
---
dlls/oleaut32/usrmarshal.c | 68 +++++++++++++++++++++++++++++++++++++++-----
1 files changed, 61 insertions(+), 7 deletions(-)
diff --git a/dlls/oleaut32/usrmarshal.c b/dlls/oleaut32/usrmarshal.c
index c090186..b9149f9 100644
--- a/dlls/oleaut32/usrmarshal.c
+++ b/dlls/oleaut32/usrmarshal.c
@@ -1166,6 +1166,41 @@ HRESULT __RPC_STUB IEnumVARIANT_Next_Stu
return hr;
}
+/* TypeInfo related freers */
+
+static void free_embedded_typedesc(TYPEDESC *tdesc);
+static void free_embedded_arraydesc(ARRAYDESC *adesc)
+{
+ switch(adesc->tdescElem.vt)
+ {
+ case VT_PTR:
+ case VT_SAFEARRAY:
+ free_embedded_typedesc(adesc->tdescElem.u.lptdesc);
+ CoTaskMemFree(adesc->tdescElem.u.lptdesc);
+ break;
+ case VT_CARRAY:
+ free_embedded_arraydesc(adesc->tdescElem.u.lpadesc);
+ CoTaskMemFree(adesc->tdescElem.u.lpadesc);
+ break;
+ }
+}
+
+static void free_embedded_typedesc(TYPEDESC *tdesc)
+{
+ switch(tdesc->vt)
+ {
+ case VT_PTR:
+ case VT_SAFEARRAY:
+ free_embedded_typedesc(tdesc->u.lptdesc);
+ CoTaskMemFree(tdesc->u.lptdesc);
+ break;
+ case VT_CARRAY:
+ free_embedded_arraydesc(tdesc->u.lpadesc);
+ CoTaskMemFree(tdesc->u.lpadesc);
+ break;
+ }
+}
+
/* ITypeComp */
HRESULT CALLBACK ITypeComp_Bind_Proxy(
@@ -1223,9 +1258,16 @@ HRESULT __RPC_STUB ITypeComp_BindType_St
HRESULT CALLBACK ITypeInfo_GetTypeAttr_Proxy(
ITypeInfo* This,
TYPEATTR** ppTypeAttr)
+
{
- FIXME("not implemented\n");
- return E_FAIL;
+ CLEANLOCALSTORAGE stg;
+ TRACE("(%p, %p)\n", This, ppTypeAttr);
+
+ stg.flags = 0;
+ stg.pStorage = NULL;
+ stg.pInterface = NULL;
+
+ return ITypeInfo_RemoteGetTypeAttr_Proxy(This, ppTypeAttr, &stg);
}
HRESULT __RPC_STUB ITypeInfo_GetTypeAttr_Stub(
@@ -1233,8 +1275,18 @@ HRESULT __RPC_STUB ITypeInfo_GetTypeAttr
LPTYPEATTR* ppTypeAttr,
CLEANLOCALSTORAGE* pDummy)
{
- FIXME("not implemented\n");
- return E_FAIL;
+ HRESULT hr;
+ TRACE("(%p, %p)\n", This, ppTypeAttr);
+
+ hr = ITypeInfo_GetTypeAttr(This, ppTypeAttr);
+ if(hr != S_OK)
+ return hr;
+
+ pDummy->flags = CLS_TYPEATTR;
+ ITypeInfo_AddRef(This);
+ pDummy->pInterface = (IUnknown*)This;
+ pDummy->pStorage = ppTypeAttr;
+ return hr;
}
HRESULT CALLBACK ITypeInfo_GetFuncDesc_Proxy(
@@ -1459,14 +1511,16 @@ void CALLBACK ITypeInfo_ReleaseTypeAttr_
ITypeInfo* This,
TYPEATTR* pTypeAttr)
{
- FIXME("not implemented\n");
+ TRACE("(%p, %p)\n", This, pTypeAttr);
+ free_embedded_typedesc(&pTypeAttr->tdescAlias);
+ CoTaskMemFree(pTypeAttr);
}
HRESULT __RPC_STUB ITypeInfo_ReleaseTypeAttr_Stub(
ITypeInfo* This)
{
- FIXME("not implemented\n");
- return E_FAIL;
+ TRACE("nothing to do\n");
+ return S_OK;
}
void CALLBACK ITypeInfo_ReleaseFuncDesc_Proxy(
More information about the wine-cvs
mailing list