Погомите разобраться
есть простейшая иерархия интерфейсов
IUnknown IUnknown
| |
I1 I2
\ /
\ /
II
|
CII(реализация)
И код ее реализующий:
struct __declspec(uuid("A7F6D957-1A1E-45fc-B710-8A841990C4A6")) I1;
struct I1: public IUnknown
{
STDMETHOD(Foo1()) = 0;
};
struct __declspec(uuid("A7F6D957-1A1E-45fc-B710-8A841990C4A1")) I2;
struct I2: public IUnknown
{
STDMETHOD(Foo2()) = 0;
};
struct __declspec(uuid("A7F6D957-1A1E-45fc-B710-8A841990C4A2")) II;
struct II: public I1, public I2
{
STDMETHOD(Foo()) = 0;
};
class CII : public CComObjectRootEx<CComSingleThreadModel>, public II
{
public:
BEGIN_COM_MAP(CII)
COM_INTERFACE_ENTRY(IUnknown)
COM_INTERFACE_ENTRY(I1)
COM_INTERFACE_ENTRY(I2)
COM_INTERFACE_ENTRY(II)
END_COM_MAP()
STDMETHODIMP Foo1()
{
return S_OK;
}
STDMETHODIMP Foo2()
{
return S_OK;
}
STDMETHODIMP Foo()
{
return S_OK;
}
};
Проблема в том, что компилятор ругается при попытке закастить CII* к IUnknown*
Что я делаю не так?