Typelib marshalling BSTRs

Mike Hearn mike at theoretic.com
Wed Jul 23 10:28:58 CDT 2003

So, moving on from that problem, I think my woes (currently) are caused
by the NDR engine not handling VT_DISPATCH variants.

in wire_size():
    FIXME("wire-size interfaces\n");

that causes VARIANT_UserMarshal to skip doing anything special for
VT_DISPATCH variants, when I think in reality, it should call
NdrInterfacePointerMarshall (btw, what's up with two spellings of
"marshal"?) to get the IDispatch* into the stream.

While rather roundabout, I think it seems clear that this is what's
needed. The problem then becomes one of NdrInterfacePointerMarshall()
needing information that isn't available from inside
VARIANT_UserMarshal, like the MIDL_STUB_BUFFER pointer.

Greg, as you are the relevant Guru here and Ove is probably a bit pissed
off with all my questions, what should we be doing here? If we are meant
to use NdrInterfacePointerMarshall to handle VT_DISPATCH variants, how
do we get the args it needs?

thanks -mike

More information about the wine-devel mailing list