DCOM (was Re: Fix CoMarshalInterThreadInterfaceInStream)

Robert Shearman R.J.Shearman at warwick.ac.uk
Tue Jun 1 10:56:51 CDT 2004

On Sat, 2004-05-29 at 00:44, Mike Hearn wrote:
> Of course calling CoMarshalInterface in this case doesn't actually do
> much, but if it helps InstallShield OK.

Actually, it does. It appears as though the interface marshaling
functions are all compatible with each other on Windows (even though
MSDN says that they aren't and then says they use the same code as the
others). Presumably InstallShield was quite understandably passing the
IStream from on the two functions that were fixed into one of the other
(supposedly compatible) functions and then that function failed because
it wasn't the right format.
Even on Wine, those other functions, such as CoMarshalInterface do
actually attempt to get a marshaller or just use the standard one and 

> If you are interested in this
> stuff I'd say trying to merge the TransGaming patch would be a good
> start. 

I assume you mean this:

I've had a look at what is in there. The way I interpret it, there are a
couple of sections:
o Auto-generated marshaling code -- this is fine to be included in Wine
and could probably be done so at any point
o Converting COM (ole32) to using RPC -- as you can see by the comments
in the code, this isn't really done through the correct interfaces yet
(and this is stuff that you only want implement once) and hence I'm not
confident that the related stuff is done correctly. There are useful
bits, but I doubt I will use all of that code.
o Rewriting the Type Library marshaller -- this isn't much better than
the code we have at the moment. Again, this isn't done through the
correct interfaces - I would prefer to use the stubless RPC to do the
same, but it would probably mean writing half of MIDL into RPCRT4.
o Miscellaneous header and bug fixes -- I'll check whether they are
included in Wine already and check whether they are correct or
workarounds for something in the patch

> This includes a lot of what you've done lately such as proper
> apartments, proper inter-thread marshalling and so on. Otherwise the
> codebase drift is going to get even worse :(

I would prefer it if we could all work on the same codebase, but as you
know the licensing restrictions largely prevent that. I hope (wish?)
that Transgaming will use more and more LGPL modules from Wine and only
develop separately the ones that are core to their business. They have
been kind of informally doing that by submitting their RPC / OLE patches
back to Wine, but they are working from the ReWind codebase, not Wine
and they are not in sync.


P.S. I am currently putting together a plan for tackling RPC / DCOM and
will present it to wine-devel soon.

More information about the wine-devel mailing list