Module: wine Branch: master Commit: 4d011e16f6a681769544c9f55af762ea3bc4055a URL: https://source.winehq.org/git/wine.git/?a=commit;h=4d011e16f6a681769544c9f55...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Wed Mar 9 10:45:50 2022 +0300
dllhost: Implement IMarshal::MarshalInterface().
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
programs/dllhost/dllhost.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/programs/dllhost/dllhost.c b/programs/dllhost/dllhost.c index bfe1d4cbbd6..241b79d13a0 100644 --- a/programs/dllhost/dllhost.c +++ b/programs/dllhost/dllhost.c @@ -147,9 +147,11 @@ static ULONG WINAPI marshal_Release(IMarshal *iface) static HRESULT WINAPI marshal_GetUnmarshalClass(IMarshal *iface, REFIID iid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags, CLSID *clsid) { - FIXME("(%p,%s,%p,%08lx,%p,%08lx,%p): stub\n", iface, wine_dbgstr_guid(iid), pv, + TRACE("(%p,%s,%p,%08lx,%p,%08lx,%p)\n", iface, wine_dbgstr_guid(iid), pv, dwDestContext, pvDestContext, mshlflags, clsid); - return E_NOTIMPL; + + *clsid = CLSID_StdMarshal; + return S_OK; }
static HRESULT WINAPI marshal_GetMarshalSizeMax(IMarshal *iface, REFIID iid, void *pv, @@ -163,8 +165,19 @@ static HRESULT WINAPI marshal_GetMarshalSizeMax(IMarshal *iface, REFIID iid, voi static HRESULT WINAPI marshal_MarshalInterface(IMarshal *iface, IStream *stream, REFIID iid, void *pv, DWORD dwDestContext, void *pvDestContext, DWORD mshlflags) { - FIXME("(%p,%s,%p,%08lx,%p,%08lx): stub\n", stream, wine_dbgstr_guid(iid), pv, dwDestContext, pvDestContext, mshlflags); - return E_NOTIMPL; + struct factory *factory = impl_from_IMarshal(iface); + IUnknown *object; + HRESULT hr; + + TRACE("(%p,%s,%p,%08lx,%p,%08lx)\n", stream, wine_dbgstr_guid(iid), pv, dwDestContext, pvDestContext, mshlflags); + + hr = CoGetClassObject(&factory->clsid, CLSCTX_INPROC_SERVER, NULL, iid, (void **)&object); + if (hr == S_OK) + { + hr = CoMarshalInterface(stream, iid, object, dwDestContext, pvDestContext, mshlflags); + IUnknown_Release(object); + } + return hr; }
static HRESULT WINAPI marshal_UnmarshalInterface(IMarshal *iface, IStream *stream,