Invoke with IDispatch* params

Mike Hearn mike at theoretic.com
Wed Jul 23 05:02:25 CDT 2003


Hi, more questions (i'll master COM yet :)

HRESULT IWebBrowser2::get_Document(IDispatch **ppDisp);

invocation of this method/property fails, for some reason. I'm not sure
why yet, but I don't understand how this is marshalled. Presumably, OLE
Automation provides a ppDisp and then dereferences it back to IDispatch
which is then marshalled. In ITypeInfo::Invoke, there is this code:

    if (tdesc->vt == VT_PTR)
	tdesc = tdesc->u.lptdesc;

when looping over the arguments (?). So, it seems that this code is
responsible for dereferencing the pointer, but it only does it once.
Shouldn't this be a loop to dereference the arg as many times as needed?
I feel that's wrong even as I write it, but I'm not sure how this part
should work.

As it is, tdesc->vt ends up being (correctly) VT_DISPATCH but pVarResult
doesn't seem to be changed....




More information about the wine-devel mailing list