今天我使用Atl创建了一个名为MyCalcObj的Com对象,然后在源代码(还是ATL工程)的某个地方我实例化了一个Com对象
CMyCalcObj obj;
编译报错:
1>f:\bho\mymathsvc\mymathsvc\mymathsvc.cpp(20) : error C2259: “CMyCalcObj”: 不能实例化抽象类
1> 由于下列成员:
1> “HRESULT CMyCalcObj::QueryInterface(const IID &,void **) throw()”: 是抽象的
1> f:\bho\mymathsvc\mymathsvc\mycalcobj.h(33) : 参见“CMyCalcObj::QueryInterface”的声明
1> “ULONG CMyCalcObj::AddRef(void) throw()”: 是抽象的
1> f:\bho\mymathsvc\mymathsvc\mycalcobj.h(33) : 参见“CMyCalcObj::AddRef”的声明
1> “ULONG CMyCalcObj::Release(void) throw()”: 是抽象的
1> f:\bho\mymathsvc\mymathsvc\mycalcobj.h(33) : 参见“CMyCalcObj::Release”的声明
经过调试得知,我们在客户端使用CoCreateInstance创建的其实是CComObject<CMyCalcObj>对象(继承自CMyCalcObj)。
CComObject基类提供IUnknown的实现。