C++ cli 调用C++/CLI派生类时出现运行时异常 由OP 2014年8月5日编辑:

C++ cli 调用C++/CLI派生类时出现运行时异常 由OP 2014年8月5日编辑:,c++-cli,C++ Cli,非常简化的代码: public ref class CXmlWriter : public System::Xml::XmlTextWriter { public: CXmlWriter(System::String ^sFilename) : XmlTextWriter(sFilename, System::Text::Encoding::Unicode) { } ~CXmlWriter() { } }; 调用

非常简化的代码:

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

    ~CXmlWriter()
        {
        }
};
调用一个包含实例化CXmlWriter的代码的函数,您不必执行该实例化代码,就会得到异常。 注释掉析构函数,就不会得到异常。将析构函数设置为虚拟并不能修复它

编辑结束 我使用的是.NET framework的第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的定义非常类似


请有人解释为什么会发生异常,以及我应该如何避免它。

如果它编译时没有错误,那么问题不太可能出在头文件上。请发布一个完整的例子来演示这个问题。请查看我对上面原始问题的编辑。