On 11/4/2011 20:21, Jacek Caban wrote:
On 11/04/11 17:11, Nikolay Sivov wrote:
On 11/4/2011 20:00, Jacek Caban wrote:
Hi Nikolay,
On 11/04/11 16:46, Nikolay Sivov wrote:
+ if(This->data->vtbl&& This->data->vtbl->invoke) {
+ hres = This->data->vtbl->invoke(This->outer, id, lcid,
wFlags, pdp, pvarRes, pei);
+ if (hres != E_NOTIMPL) return hres;
+ }
Using E_NOTIMPL for special meaning here seems wrong to me.
DISP_E_UNKNOWNNAME could be a better choice. However, if you'd move
custom invoke implementation to be the last choice, after dynamic
and typelib-based values, then you could simply return whatever
invoke returns.
I was thinking about additional call in vtable to use instead of
is_custom to check if dispid is supposed to be handled with custom
invoke. What do you think about it?
It really depends on how it's used in msxml3.
The only case I'm aware of so far is index based access of collection
elements, that's all. So I'll better go with DISP_E_UNKNOWNNAME for now
cause use of this thing is really limited in msxml.
The problem with this solution is that it means more code in every
object using custom dipids. If we can avoid it, even at cost of more
complicated code in dispex.c, that's probably better in terms of code
maintaining IMO.
Right, extra call is too much probably.
Jacek