ATL 简单对象的有关问题

ATL 简单对象的问题
class ATL_NO_VTABLE CSimpler :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CSimpler, &CLSID_Simpler>,
public IConnectionPointContainerImpl<CSimpler>,
public CProxy_ISimplerEvents<CSimpler>,
public IDispatchImpl<ISimpler, &IID_ISimpler, &LIBID_SampleCtrlLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public IDispatchImpl<IWebBrowser, &__uuidof(IWebBrowser), &LIBID_SHDocVw, /* wMajor = */ 1, /* wMinor = */ 1>,
public IDispatchImpl<IWebBrowser2, &__uuidof(IWebBrowser2), &LIBID_SHDocVw, /* wMajor = */ 1, /* wMinor = */ 1>,
public IDispatchImpl<IWebBrowserApp, &__uuidof(IWebBrowserApp), &LIBID_SHDocVw, /* wMajor = */ 1, /* wMinor = */ 1>

{
public:
CSimpler()
{
}

DECLARE_REGISTRY_RESOURCEID(IDR_SIMPLER)


BEGIN_COM_MAP(CSimpler)
COM_INTERFACE_ENTRY(ISimpler)
COM_INTERFACE_ENTRY2(IDispatch, IWebBrowser)
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY(IWebBrowser)
COM_INTERFACE_ENTRY(IWebBrowser2)
COM_INTERFACE_ENTRY(IWebBrowserApp)

END_COM_MAP()

BEGIN_CONNECTION_POINT_MAP(CSimpler)
CONNECTION_POINT_ENTRY(__uuidof(_ISimplerEvents))
END_CONNECTION_POINT_MAP()


DECLARE_PROTECT_FINAL_CONSTRUCT()

HRESULT FinalConstruct()
{
return S_OK;
}

void FinalRelease()
{
}
编译出现错误
1>c:\vcprj_2005\samplectrl\samplectrl\simpler.h(38) : error C2594: “static_cast”: 从“CSimpler::_ComMapClass *”到“IWebBrowser *”的转换不明确
1>c:\vcprj_2005\samplectrl\samplectrl\simpler.h(40) : error C2594: “static_cast”: 从“CSimpler::_ComMapClass *”到“IWebBrowser *”的转换不明确
1>c:\vcprj_2005\samplectrl\samplectrl\simpler.h(42) : error C2594: “static_cast”: 从“CSimpler::_ComMapClass *”到“IWebBrowserApp *”的转换不明确

------解决方案--------------------
看错了,因为IWebBrowser有继承,修改如下:
C/C++ code

class ATL_NO_VTABLE CSimpler :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CSimpler, &CLSID_Simpler>,
public IConnectionPointContainerImpl<CSimpler>,
public CProxy_ISimplerEvents<CSimpler>,
public ISimpler,
public IDispatchImpl<IWebBrowser2, &__uuidof(IWebBrowser), &LIBID_SHDocVw, /* wMajor = */ 1, /* wMinor = */ 1>
{
public:
CSimpler()
{
}

DECLARE_REGISTRY_RESOURCEID(IDR_SIMPLER)


BEGIN_COM_MAP(CSimpler)
COM_INTERFACE_ENTRY(ISimpler)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY(IWebBrowser)
COM_INTERFACE_ENTRY(IWebBrowser2)
COM_INTERFACE_ENTRY(IWebBrowserApp)
END_COM_MAP()

BEGIN_CONNECTION_POINT_MAP(CSimpler)
CONNECTION_POINT_ENTRY(__uuidof(_ISimplerEvents))
END_CONNECTION_POINT_MAP()


DECLARE_PROTECT_FINAL_CONSTRUCT()

HRESULT FinalConstruct()
{
return S_OK;
}

void FinalRelease()
{
}
 
}