调用C ++ / CLI派生类时的运行时异常

时间:2014-08-04 15:58:08

标签: c++-cli

2014年8月5日OP编辑:

许多简化代码:

public ref class CXmlWriter : public System::Xml::XmlTextWriter
{
public:
    CXmlWriter(System::String ^sFilename) : XmlTextWriter(sFilename, System::Text::Encoding::Unicode)
        {
        }

    ~CXmlWriter()
        {
        }
};

调用包含实例化CXmlWriter的代码的函数(您不必执行该实例化代码)并获得异常。 注释掉析构函数,你就不会得到异常。使析构函数虚拟化并不能解决它。

编辑结束

我正在使用.NET框架的第4版。

我有源自System :: Xml :: XmlTextWriter的C ++ / CLI类CXmlWriter和源自CXmlWriter的CMinMaxXmlWriter。
两个类的实现都非常简单,一切都可以编译而不会出错。但是,当我尝试在运行时实例化CMinMaxXmlWriter时,我得到一个带有错误消息的TypeLoadException:

  

方法实现中引用的声明不能是最终方法

提及CXmlWriter

以前在框架的第2版中没有任何问题。

这是CXmlWriter的标题:

public ref class CXmlWriter : public System::Xml::XmlTextWriter
{
public:
    CXmlWriter(System::String ^sFilename);
    ~CXmlWriter();
    !CXmlWriter() {}

    virtual bool    Open();
    virtual void    Close() override;    

    virtual bool    WriteValueAndAttribute(System::String ^sElementName, System::String ^sElementValue, System::String ^sAttrName, System::String ^sAttrValue);
    virtual bool    WriteValueAndAttribute(System::String ^sElementName, double dElementValue, System::String ^sAttrName, System::String ^sAttrValue);

protected:
    bool                    m_bIsOpen;
};

CMinMaxXmlWriter以非常类似的方式定义。

请有人解释为什么会发生异常以及我应该采取哪些措施来避免这种情况。

0 个答案:

没有答案