Re: Dual interface
George <George@discussions.microsoft.com> wrote:
A component can implement multiple interfaces - meaning, its
QueryInterface implementation responds positively to more than one
IID. Only one of these interfaces can be dual.
I have tried in VS 2008, suppose there is a component Foo, which
implements interface Ibbbb and Icccc, we can in IDL mark both Ibbb
abd Iccc as dual. Seems a class could implement two dual interface?
While the compiler doesn't complain, this violates certain COM rules,
and creates problems when interfaces are marshalled. See
http://groups.google.com/group/microsoft.public.vc.atl/browse_frm/thread/e303eb6e5927b5b6
As a practical matter however, what's the point? Presumably, you want a
dual interface so that some clients could access it via late binding,
using IDispatch::Invoke. Now you have two dual interfaces, which means
you have two different implementations of IDispatch. But you can only
return one of them from QueryInterface(IID_IDispatch). Late-bound
clients (such as scripts) are then unable to ever call the second
interface.
--
With best wishes,
Igor Tandetnik
With sufficient thrust, pigs fly just fine. However, this is not
necessarily a good idea. It is hard to be sure where they are going to
land, and it could be dangerous sitting under them as they fly
overhead. -- RFC 1925