错误c2259从IUnknown实现接口类

Error c2259 implementing interface class from IUnknown

本文关键字:接口 实现 IUnknown c2259 错误      更新时间:2023-10-16

我正试图添加一个c++项目到我的c#代码,我正试图实现IUnknown接口。我一直得到一个关于c2259的错误:不能实例化抽象类。

我试着玩一些东西,比如使类一个ref类和改变实现,但似乎没有工作。下面是我使用的一些代码:

接口类:

interface __declspec(uuid("c78b266d-b2c0-4e9d-863b-e3f74a721d47"))
IClientWrapper : public IUnknown
{
    public:
        virtual STDMETHODIMP get_CurrentIsReadOnly(bool *pIsReadOnly) = 0;
        virtual STDMETHODIMP get_CachedIsReadOnly(bool *pIsReadOnly) = 0;
};

我的处理器类:

#include "RotateHandler.h"
RotateHandler::RotateHandler()
{
}
RotateHandler::~RotateHandler()
{
}
STDMETHODIMP RotateHandler::CreateClientWrapper(IUIAutomationPatternInstance *pPatternInstance, IUnknown **pClientWrapper)
{
    *pClientWrapper = new RotateWrapper(pPatternInstance);  //here is error c2259
    if (*pClientWrapper == NULL)
        return E_INVALIDARG;
    return S_OK;
}
STDMETHODIMP RotateHandler::Dispatch(IUnknown *pTarget, UINT index, const struct UIAutomationParameter *pParams, UINT cParams)
{
    switch(index)
    {
        case Rotation_GetIsReadOnly:
            return ((ICustomProvider*)pTarget)->get_IsReadOnly((bool*)pParams[0].pData);
    }
    return E_INVALIDARG;
}

和我的包装类:

#include "RotateWrapper.h"
RotateWrapper::RotateWrapper()
{
}
RotateWrapper::RotateWrapper(IUIAutomationPatternInstance *pInstance)
    : _pInstance(pInstance)
{
    _pInstance->AddRef();
}
RotateWrapper::~RotateWrapper()
{
    _pInstance->Release();
}
STDMETHODIMP RotateWrapper::get_CurrentIsReadOnly(bool *pIsReadOnly)
{
    return _pInstance->GetProperty(0, false, UIAutomationType_Bool, pIsReadOnly);
}
STDMETHODIMP RotateWrapper::get_CachedIsReadOnly(bool *pIsReadOnly)
{
    return _pInstance->GetProperty(0, true, UIAutomationType_Bool, pIsReadOnly);
}

任何帮助都是感激的。

我的类定义如下:

public class RotateWrapper : public IClientWrapper

需要实现继承自IUnknown的方法:QueryInterfaceAddRefRelease。如果做不到这一点,则意味着您的类仍然具有纯虚方法,并且编译器禁止您实例化这样的类是正确的。