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的定义非常类似
请有人解释为什么会发生异常,以及我应该如何避免它。如果它编译时没有错误,那么问题不太可能出在头文件上。请发布一个完整的例子来演示这个问题。请查看我对上面原始问题的编辑。