From: Magnus Olsen Date: Sat, 3 Dec 2005 20:53:23 +0000 (+0000) Subject: Implmenet IDxDiagContainerImpl_GetNumberOfProps, IDxDiagContainerImpl_EnumPropNames... X-Git-Tag: backups/ros-branch-0_2_9@19949~90 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=dad86fa425cd26af9a74ac088974a33ec249e618 Implmenet IDxDiagContainerImpl_GetNumberOfProps, IDxDiagContainerImpl_EnumPropNames, IDxDiagContainerImpl_GetProp working fine in windows but in reactos we are missing some regvalues (alot). This change should be commit to wine. svn path=/trunk/; revision=19844 --- diff --git a/reactos/lib/ddraw/ddraw.xml b/reactos/lib/ddraw/ddraw.xml index 75df1e8e624..752859198d8 100644 --- a/reactos/lib/ddraw/ddraw.xml +++ b/reactos/lib/ddraw/ddraw.xml @@ -1,5 +1,6 @@ - + + . diff --git a/reactos/lib/devenum/devenum.xml b/reactos/lib/devenum/devenum.xml index b2c0c013651..ef6b2aed3d3 100644 --- a/reactos/lib/devenum/devenum.xml +++ b/reactos/lib/devenum/devenum.xml @@ -1,4 +1,5 @@ + . include/wine diff --git a/reactos/lib/dplay/dplay.xml b/reactos/lib/dplay/dplay.xml index ae81c5af00b..77d0a94daea 100644 --- a/reactos/lib/dplay/dplay.xml +++ b/reactos/lib/dplay/dplay.xml @@ -1,4 +1,4 @@ - + . include/wine diff --git a/reactos/lib/dxdiagn/container.c b/reactos/lib/dxdiagn/container.c index 04348c0d39a..63acaad5608 100644 --- a/reactos/lib/dxdiagn/container.c +++ b/reactos/lib/dxdiagn/container.c @@ -20,9 +20,9 @@ */ #include "config.h" -#include "dxdiag_private.h" #include "wine/debug.h" #include "wine/unicode.h" +#include "dxdiag_private.h" WINE_DEFAULT_DEBUG_CHANNEL(dxdiag); @@ -120,21 +120,73 @@ HRESULT WINAPI IDxDiagContainerImpl_GetChildContainer(PDXDIAGCONTAINER iface, LP return E_INVALIDARG; } -HRESULT WINAPI IDxDiagContainerImpl_GetNumberOfProps(PDXDIAGCONTAINER iface, DWORD* pdwCount) { - /* IDxDiagContainerImpl *This = (IDxDiagContainerImpl *)iface; */ - FIXME("(%p, %p): stub\n", iface, pdwCount); +HRESULT WINAPI IDxDiagContainerImpl_GetNumberOfProps(PDXDIAGCONTAINER iface, DWORD* pdwCount) +{ + IDxDiagContainerImpl *This = (IDxDiagContainerImpl *)iface; + + + *pdwCount = This->nSubpProperty; + + TRACE("(%p)->(%ld)\n", iface, *pdwCount); + return S_OK; } HRESULT WINAPI IDxDiagContainerImpl_EnumPropNames(PDXDIAGCONTAINER iface, DWORD dwIndex, LPWSTR pwszPropName, DWORD cchPropName) { - /* IDxDiagContainerImpl *This = (IDxDiagContainerImpl *)iface; */ - FIXME("(%p, %lu, %s, %lu): stub\n", iface, dwIndex, debugstr_w(pwszPropName), cchPropName); - return S_OK; + + IDxDiagContainerImpl *This = (IDxDiagContainerImpl *)iface; + + if (This->pProperty == NULL) + { + + This->pProperty = (Contain_Property *)HeapAlloc(GetProcessHeap(), + HEAP_ZERO_MEMORY, + sizeof(Contain_Property) *(dwIndex+1)); + + This->nSubpProperty = dwIndex+1; + } + else + { + if (dwIndex>=This->nSubpProperty) + { + This->pProperty = (Contain_Property *) HeapReAlloc(GetProcessHeap(), + HEAP_ZERO_MEMORY, This->pProperty, + sizeof(Contain_Property) *(dwIndex+1)); + This->nSubpProperty = dwIndex+1; + } + + } + + lstrcpynW(pwszPropName, This->pProperty[dwIndex].pwszPropName, cchPropName); + + TRACE("(%p)->(%s)\n", iface, debugstr_w(This->pProperty[dwIndex].pwszPropName)); + return S_OK; } -HRESULT WINAPI IDxDiagContainerImpl_GetProp(PDXDIAGCONTAINER iface, LPCWSTR pwszPropName, VARIANT* pvarProp) { - /* IDxDiagContainerImpl *This = (IDxDiagContainerImpl *)iface; */ - FIXME("(%p, %s, %p): stub\n", iface, debugstr_w(pwszPropName), pvarProp); +HRESULT WINAPI IDxDiagContainerImpl_GetProp(PDXDIAGCONTAINER iface, LPCWSTR pwszPropName, VARIANT* pvarProp) +{ + IDxDiagContainerImpl *This = (IDxDiagContainerImpl *)iface; + Contain_Property *propert = This->pProperty; + TRACE("(%p)->(%s, %p)\n", iface, debugstr_w(pwszPropName), pvarProp); + + while (propert->pwszPropName && lstrcmpW(propert->pwszPropName, pwszPropName)) + { + propert += sizeof(Contain_Property); + } + + if (!propert->pwszPropName) + return E_INVALIDARG; + + /* FIXME + if (property->pvarProp == VT_EMPTY) + return E_INVALIDARG; + + if (property->pvarProp.vt == VT_ERROR) + return E_INVALIDARG; + */ + + memcpy(pvarProp,&propert->pvarProp, sizeof(VARIANT)); + return S_OK; } diff --git a/reactos/lib/dxdiagn/dxdiag_private.h b/reactos/lib/dxdiagn/dxdiag_private.h index 2837226dc9c..8336098501a 100644 --- a/reactos/lib/dxdiagn/dxdiag_private.h +++ b/reactos/lib/dxdiagn/dxdiag_private.h @@ -48,6 +48,12 @@ extern IDxDiagProviderVtbl DxDiagProvider_Vtbl; /***************************************************************************** * IDxDiagProvider implementation structure */ +typedef struct Contain_Property +{ + WCHAR *pwszPropName; + VARIANT pvarProp; +} Contain_Property; + struct IDxDiagProviderImpl { /* IUnknown fields */ IDxDiagProviderVtbl *lpVtbl; @@ -92,6 +98,8 @@ struct IDxDiagContainerImpl { /* IDxDiagContainer fields */ IDxDiagContainerImpl_SubContainer* subContainers; DWORD nSubContainers; + Contain_Property* pProperty; + DWORD nSubpProperty; }; /* IUnknown: */