множественное наследование,ATL,COM
От: eProgD  
Дата: 29.10.08 13:14
Оценка:
Погомите разобраться
есть простейшая иерархия интерфейсов
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*
Что я делаю не так?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.