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....