[PATCH 2/2] propsys: Add a semi-stub for PSCreatePropertyStoreFromObject().

Nikolay Sivov nsivov at codeweavers.com
Sat Nov 2 16:13:37 CDT 2019


Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47958
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---

This supersedes 172658.

 dlls/propsys/propstore.c     | 16 ++++++++++++++++
 dlls/propsys/propsys.spec    |  2 +-
 dlls/propsys/tests/propsys.c | 35 ++++++++++++++++++++++++++++++++++-
 include/propsys.idl          |  1 +
 4 files changed, 52 insertions(+), 2 deletions(-)

diff --git a/dlls/propsys/propstore.c b/dlls/propsys/propstore.c
index 6212f29312..6e0d49057d 100644
--- a/dlls/propsys/propstore.c
+++ b/dlls/propsys/propstore.c
@@ -473,3 +473,19 @@ HRESULT PropertyStore_CreateInstance(IUnknown *pUnkOuter, REFIID iid, void** ppv
 
     return ret;
 }
+
+HRESULT WINAPI PSCreatePropertyStoreFromObject(IUnknown *obj, DWORD access, REFIID riid, void **ret)
+{
+    HRESULT hr;
+
+    TRACE("(%p, %d, %s, %p)\n", obj, access, debugstr_guid(riid), ret);
+
+    if (!obj || !ret)
+        return E_POINTER;
+
+    if (IsEqualIID(riid, &IID_IPropertyStore) && SUCCEEDED(hr = IUnknown_QueryInterface(obj, riid, ret)))
+        return hr;
+
+    FIXME("Unimplemented for %s.\n", debugstr_guid(riid));
+    return E_NOTIMPL;
+}
diff --git a/dlls/propsys/propsys.spec b/dlls/propsys/propsys.spec
index 8416b6dc74..3582805726 100644
--- a/dlls/propsys/propsys.spec
+++ b/dlls/propsys/propsys.spec
@@ -68,7 +68,7 @@
 @ stdcall PSCreateMemoryPropertyStore(ptr ptr)
 @ stub PSCreateMultiplexPropertyStore
 @ stub PSCreatePropertyChangeArray
-@ stub PSCreatePropertyStoreFromObject
+@ stdcall PSCreatePropertyStoreFromObject(ptr long ptr ptr)
 @ stub PSCreatePropertyStoreFromPropertySetStorage
 @ stub PSCreateSimplePropertyChange
 @ stub PSEnumeratePropertyDescriptions
diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c
index 419a0a080b..191a154744 100644
--- a/dlls/propsys/tests/propsys.c
+++ b/dlls/propsys/tests/propsys.c
@@ -29,8 +29,8 @@
 
 #include "windef.h"
 #include "winbase.h"
-#include "objbase.h"
 #include "initguid.h"
+#include "objbase.h"
 #include "propsys.h"
 #include "propvarutil.h"
 #include "strsafe.h"
@@ -1919,6 +1919,38 @@ static void  test_propertystore(void)
     IPropertyStore_Release(propstore);
 }
 
+static void test_PSCreatePropertyStoreFromObject(void)
+{
+    IPropertyStore *propstore;
+    IUnknown *unk;
+    HRESULT hr;
+
+    hr = PSCreateMemoryPropertyStore(&IID_IPropertyStore, (void **)&propstore);
+    ok(hr == S_OK, "Failed to create property store, hr %#x.\n", hr);
+
+    hr = PSCreatePropertyStoreFromObject(NULL, STGM_READWRITE, &IID_IUnknown, (void **)&unk);
+    ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr);
+
+    hr = PSCreatePropertyStoreFromObject((IUnknown *)propstore, STGM_READWRITE, &IID_IUnknown, NULL);
+    ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr);
+
+    hr = PSCreatePropertyStoreFromObject((IUnknown *)propstore, STGM_READWRITE, &IID_IUnknown, (void **)&unk);
+todo_wine
+    ok(hr == S_OK, "Failed to create wrapper, hr %#x.\n", hr);
+    if (SUCCEEDED(hr))
+    {
+        ok(unk != (IUnknown *)propstore, "Unexpected object returned.\n");
+        IUnknown_Release(unk);
+    }
+
+    hr = PSCreatePropertyStoreFromObject((IUnknown *)propstore, STGM_READWRITE, &IID_IPropertyStore, (void **)&unk);
+    ok(hr == S_OK, "Failed to create wrapper, hr %#x.\n", hr);
+    ok(unk == (IUnknown *)propstore, "Unexpected object returned.\n");
+    IUnknown_Release(unk);
+
+    IPropertyStore_Release(propstore);
+}
+
 START_TEST(propsys)
 {
     test_PSStringFromPropertyKey();
@@ -1941,4 +1973,5 @@ START_TEST(propsys)
     test_persistserialized();
     test_PSCreateMemoryPropertyStore();
     test_propertystore();
+    test_PSCreatePropertyStoreFromObject();
 }
diff --git a/include/propsys.idl b/include/propsys.idl
index bdd67fa6a5..fa6902831e 100644
--- a/include/propsys.idl
+++ b/include/propsys.idl
@@ -800,6 +800,7 @@ cpp_quote("#define GUIDSTRING_MAX 39")
 cpp_quote("#define PKEYSTR_MAX (GUIDSTRING_MAX + 1 + PKEY_PIDSTR_MAX)")
 
 cpp_quote("HRESULT WINAPI PSCreateMemoryPropertyStore(REFIID,void **);")
+cpp_quote("HRESULT WINAPI PSCreatePropertyStoreFromObject(IUnknown*,DWORD,REFIID,void **);")
 cpp_quote("HRESULT WINAPI PSStringFromPropertyKey(REFPROPERTYKEY,LPWSTR,UINT);")
 cpp_quote("HRESULT WINAPI PSPropertyKeyFromString(LPCWSTR,PROPERTYKEY*);")
 cpp_quote("HRESULT WINAPI PSGetPropertyDescription(REFPROPERTYKEY,REFIID,void **);")
-- 
2.24.0.rc1




More information about the wine-devel mailing list