「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