https://bugs.winehq.org/show_bug.cgi?id=53926
Bug ID: 53926 Summary: New typelib marshaller depends on IID_IDispatch support from target interface Product: Wine Version: 7.21 Hardware: x86-64 OS: Linux Status: NEW Keywords: regression, testcase Severity: normal Priority: P2 Component: oleaut32 Assignee: wine-bugs@winehq.org Reporter: dmitry@baikal.ru CC: z.figura12@gmail.com Regression SHA1: 077b4391d442e927a2a59b5afb244355b0634aaa Distribution: ---
Created attachment 73481 --> https://bugs.winehq.org/attachment.cgi?id=73481 test (source + binary)
New typelib marshaller depends on IID_IDispatch support from target interface, however applications created with Delphi/.Net don't always follow this implication.
This is a regression, and it starts from
commit 077b4391d442e927a2a59b5afb244355b0634aaa Author: Zebediah Figura z.figura12@gmail.com Date: Fri Nov 9 18:02:00 2018 -0600
oleaut32: Rip out the old typelib marshaller.
Signed-off-by: Zebediah Figura z.figura12@gmail.com Signed-off-by: Marcus Meissner marcus@jet.franken.de Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
Old typelib marshaller didn't have a requirement that an interface a proxy/ stub being created for must support IID_IDispatch.
Attached testcase replicates what I can deduce from the logs, and runs without failures under wine-3.0.5, but fails in several places under newer versions of Wine. The test produces 2 extra IUnknown::QueryInterface() calls under wine-3.0.5 during ::CreateStub() invocation, however it's pretty simple to fix following a FIXME in oleaut32 and stub manager in ole32, after that the test output from wine-3.0.5 matches what I observe under windows 10.
Although the test uses IConnectionPoint::Advise() to reproduce the bug (as the application that I have here does) it seems that any client<=>server remote call reliably replicates the problem, and source of the bug leads to CreateStub/CreateProxy limitations.