From: Kevin Martinez 137180189+kevinrmartinez@users.noreply.github.com
--- dlls/actxprxy/usrmarshal.c | 18 ++++++++++++++++++ dlls/shell32/enumobjects.c | 12 ++++++------ include/shobjidl.idl | 14 +++++++++++--- 3 files changed, 35 insertions(+), 9 deletions(-)
diff --git a/dlls/actxprxy/usrmarshal.c b/dlls/actxprxy/usrmarshal.c index e4eada6848f..5fa3c8581ec 100644 --- a/dlls/actxprxy/usrmarshal.c +++ b/dlls/actxprxy/usrmarshal.c @@ -247,3 +247,21 @@ HRESULT __RPC_STUB IParentAndItem_GetParentAndItem_Proxy( TRACE("(%p)->(%p %p %p)\n", This, parent, folder, child); return IParentAndItem_RemoteGetParentAndItem_Proxy(This, parent, folder, child); } + +HRESULT CALLBACK IEnumObjects_Next_Proxy(IEnumObjects *This, ULONG celt, REFIID riid, void **rgelt, ULONG *pceltFetched) +{ + ULONG fetched; + TRACE("(%p)->(%ld, %p, %p, %p)\n", This, celt, debugstr_guid(riid), rgelt, pceltFetched); + if (!pceltFetched) pceltFetched = &fetched; + return IEnumObjects_RemoteNext_Proxy(This, celt, riid, rgelt, pceltFetched); +} + +HRESULT __RPC_STUB IEnumObjects_Next_Stub(IEnumObjects *This, ULONG celt, REFIID riid, void **rgelt, ULONG *pceltFetched) +{ + HRESULT hr; + TRACE("(%p)->(%ld, %p, %p, %p)\n", This, celt, debugstr_guid(riid), rgelt, pceltFetched); + *pceltFetched = 0; + hr = IEnumObjects_Next(This, celt, riid, rgelt, pceltFetched); + if (hr == S_OK) *pceltFetched = celt; + return hr; +} diff --git a/dlls/shell32/enumobjects.c b/dlls/shell32/enumobjects.c index 2b769f49f68..770f995b9d1 100644 --- a/dlls/shell32/enumobjects.c +++ b/dlls/shell32/enumobjects.c @@ -36,9 +36,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
struct enum_objects { - IEnumObjects IEnumObjects_iface; + IEnumObjects IEnumObjects_iface; IObjectCollection IObjectCollection_iface; - LONG ref; + LONG ref; };
static inline struct enum_objects *impl_from_IEnumObjects(IEnumObjects *iface) @@ -109,11 +109,11 @@ static HRESULT WINAPI enum_objects_Next(IEnumObjects *iface, ULONG celt, REFIID struct enum_objects *This = impl_from_IEnumObjects(iface);
FIXME("(%p/%p %ld, %p)->(%p, %p): stub!\n", This, iface, celt, debugstr_guid(riid), rgelt, celtFetched); - - if (celtFetched) + + if (celtFetched) *celtFetched = 0; - - return S_FALSE; + + return S_FALSE; }
static HRESULT WINAPI enum_objects_Skip(IEnumObjects *iface, ULONG celt) diff --git a/include/shobjidl.idl b/include/shobjidl.idl index bb87fc31587..624545b80db 100644 --- a/include/shobjidl.idl +++ b/include/shobjidl.idl @@ -4134,11 +4134,19 @@ interface IFileOperation : IUnknown ] interface IEnumObjects : IUnknown { - HRESULT Next( + [local] HRESULT Next( + [in] ULONG celt, + [in] REFIID riid, + [out, size_is(celt), length_is(*pceltFetched), iid_is(riid)] void **rgelt, + [out] ULONG *pceltFetched + ); + + [call_as(Next)] HRESULT RemoteNext( [in] ULONG celt, [in] REFIID riid, - [out, iid_is(riid)] void **rgelt, - [out, optional] ULONG *pceltFetched ); + [out, size_is(celt), length_is(*pceltFetched), iid_is(riid)] void **rgelt, + [out] ULONG *pceltFetched + );
HRESULT Skip([in] ULONG celt); HRESULT Reset();