描述:
本人使用ATL制作一控件,其中有两个类:CCapability2和CNKOTwainCapability,并且CNKOTwainCapability中定义了一ICapability2属性
STDMETHODIMP CNKOTwainCapability::get_CapInfo(ICapability2 **pVal)
{
// TODO: Add your implementation code here
return S_OK;
}
在CNKOTwainCapability中定义一实例对象变量:CCapability2 m_CapInfo;
编译提示说不能实例化抽象类CCapability2,并指明虚函数QueryInterface、AddRef、Release未定义。查了一下,好像说定义的ATL类均未实现IUnknown的这三个函数。那么如何实现呢? 能否简要代码描述?多谢了!
解决方案1:
com对象不能象c++样定义.要先coCreateInstance
解决方案2: 在CNKOTwainCapability定义CCapability2 *m_CapInfo;
然后m_CapInfo=new CComObject<CCapability2>;
如果你的类CCapability2是通过ATL的Insert Object Wizard添加的话,那是不用实现IUnknown的三个成员函数的(ATL帮你实现了)。
如果的CCapability2就是直接从IUnknown继承下来的。那么IUnknown的三个成员函数是需要你自己去实现的,不然就不能实例化,因为CCapability2还是抽象类啊。你还需要在实现文件中添加如下的代码:
STDMETHODIMP CCapability2::QueryInterface(REFIID riid, void **ppvObject)
{
//
}
unsigned long __stdcall CCapability2::AddRef()
{
//
}
unsigned long __stdcall CCapability2::Release()
{
//
}