“ATL简单对象”向导不提供指定从现有的coclass及其接口派生新类的方法。在Visual Studio 2008中,如何让我从一个现有的衍生一个新的ATL COM类(即Base
工具IBase
,我想打从Base
实现IDerived
,其中IDerived
从IBase
衍生派生的新Derived
类)。如何制作一个从基类派生的ATL COM类?
更新:听起来很简单,但向导生成的ATL类最多有六个基类,一个COM映射和一个连接点映射。在派生类中应该重复哪些基类和映射?如果映射在派生类中重复,那么它们是否应包含基类映射的内容或仅包含其他项目?基类的顺序是否重要?那么FinalConstruct()
和FinalRelease()
?应该在派生类中重复DECLARE_PROTECT_FINAL_CONSTRUCT
和DECLARE_REGISTRY_RESOURCEID
?
这是一个样例基类,除了所有的样板外都是空的。现在派生类应该是什么样子?
class ATL_NO_VTABLE CBase :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CBase, &CLSID_Base>,
public ISupportErrorInfo,
public IConnectionPointContainerImpl<CBase>,
public CProxy_IBaseEvents<CBase>,
public IDispatchImpl<IBase, &IID_IBase, &LIBID_ExampleLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CBase()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_Base)
BEGIN_COM_MAP(CBase)
COM_INTERFACE_ENTRY(IBase)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
COM_INTERFACE_ENTRY(IConnectionPointContainer)
END_COM_MAP()
BEGIN_CONNECTION_POINT_MAP(CBase)
CONNECTION_POINT_ENTRY(__uuidof(_IBaseEvents))
END_CONNECTION_POINT_MAP()
// ISupportsErrorInfo
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
};
OBJECT_ENTRY_AUTO(__uuidof(Base), CBase)
向导生成的ATL类最多有六个基类,一个COM映射和一个连接点映射。哪些基类和映射应该在派生类中重复,基类的顺序是否重要?那么FinalConstruct()和FinalRelease()呢? – Qwertie 2008-11-18 15:58:24