Module: wine Branch: refs/heads/master Commit: c7bb8bd4fe651b9b360bce5ca65c34fc593bf6b5 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=c7bb8bd4fe651b9b360bce5c...
Author: Huw Davies huw@codeweavers.com Date: Sun May 7 22:00:51 2006 +0100
oleaut32: Implement GetVarDesc_Proxy and friends.
---
dlls/oleaut32/usrmarshal.c | 39 ++++++++++++++++++++++++++++++++------- 1 files changed, 32 insertions(+), 7 deletions(-)
diff --git a/dlls/oleaut32/usrmarshal.c b/dlls/oleaut32/usrmarshal.c index fd24b4a..562983a 100644 --- a/dlls/oleaut32/usrmarshal.c +++ b/dlls/oleaut32/usrmarshal.c @@ -1448,8 +1448,14 @@ HRESULT CALLBACK ITypeInfo_GetVarDesc_Pr UINT index, VARDESC** ppVarDesc) { - FIXME("not implemented\n"); - return E_FAIL; + CLEANLOCALSTORAGE stg; + TRACE("(%p, %d, %p)\n", This, index, ppVarDesc); + + stg.flags = 0; + stg.pStorage = NULL; + stg.pInterface = NULL; + + return ITypeInfo_RemoteGetVarDesc_Proxy(This, index, ppVarDesc, &stg); }
HRESULT __RPC_STUB ITypeInfo_GetVarDesc_Stub( @@ -1458,8 +1464,18 @@ HRESULT __RPC_STUB ITypeInfo_GetVarDesc_ LPVARDESC* ppVarDesc, CLEANLOCALSTORAGE* pDummy) { - FIXME("not implemented\n"); - return E_FAIL; + HRESULT hr; + TRACE("(%p, %d, %p)\n", This, index, ppVarDesc); + + hr = ITypeInfo_GetVarDesc(This, index, ppVarDesc); + if(hr != S_OK) + return hr; + + pDummy->flags = CLS_VARDESC; + ITypeInfo_AddRef(This); + pDummy->pInterface = (IUnknown*)This; + pDummy->pStorage = ppVarDesc; + return hr; }
HRESULT CALLBACK ITypeInfo_GetNames_Proxy( @@ -1709,14 +1725,23 @@ void CALLBACK ITypeInfo_ReleaseVarDesc_P ITypeInfo* This, VARDESC* pVarDesc) { - FIXME("not implemented\n"); + TRACE("(%p, %p)\n", This, pVarDesc); + + if(pVarDesc->lpstrSchema) + CoTaskMemFree(pVarDesc->lpstrSchema); + + if(pVarDesc->varkind == VAR_CONST) + CoTaskMemFree(pVarDesc->u.lpvarValue); + + free_embedded_elemdesc(&pVarDesc->elemdescVar); + CoTaskMemFree(pVarDesc); }
HRESULT __RPC_STUB ITypeInfo_ReleaseVarDesc_Stub( ITypeInfo* This) { - FIXME("not implemented\n"); - return E_FAIL; + TRACE("nothing to do\n"); + return S_OK; }