This patch series rewrites the Automation type library marshaller on top of NDR Oif-mode stubless proxies, after the conversation here:
https://www.winehq.org/pipermail/wine-devel/2017-November/119456.html
The idea is essentially to build the format strings and other proxy-related structures dynamically, and then pass those to the standard cproxy/cstub implementations. The code was written largely based on widl and ends up having a fair amount of the same structure.
Zebediah Figura (14): rpcrt4: Add a stub implementation of CreateProxyFromTypeInfo(). rpcrt4: Add a stub implementation of CreateStubFromTypeInfo(). rpcrt4: Build the typelib proxy headers. rpcrt4: Build the typelib stub headers. rpcrt4: Write the function header into the procedure format string. rpcrt4: Write parameter signatures into the procedure format string. rpcrt4: Write type format strings for pointers. rpcrt4: Write type format strings for fixed arrays. rpcrt4: Write type format strings for fixed structs. rpcrt4: Write type format strings for Automation types. rpcrt4: Retrieve the underlying interface for dual interfaces. rpcrt4: Delegate to the parent if it is not IUnknown. rpcrt4: Write the floating-point mask on x86-64. oleaut32: Rip out the old typelib marshaller.
Makefile.in | 1 + dlls/oleaut32/Makefile.in | 1 - dlls/oleaut32/oleaut.c | 284 +++- dlls/oleaut32/tests/tmarshal.c | 24 +- dlls/oleaut32/tmarshal.c | 2351 -------------------------------- dlls/oleaut32/typelib.c | 32 - dlls/oleaut32/typelib.h | 6 - dlls/rpcrt4/Makefile.in | 22 +- dlls/rpcrt4/cproxy.c | 70 +- dlls/rpcrt4/cpsf.h | 30 + dlls/rpcrt4/cstub.c | 11 +- dlls/rpcrt4/ndr_typelib.c | 1127 +++++++++++++++ 12 files changed, 1443 insertions(+), 2516 deletions(-) delete mode 100644 dlls/oleaut32/tmarshal.c create mode 100644 dlls/rpcrt4/ndr_typelib.c