在Windows Forms Application中使用boost序列化

时间:2013-03-29 15:37:31

标签: c++ winforms boost clr

我遇到了boost和.net-Framework的问题。我没有.net就编写了我的课程。这个项目工作正常,现在我将类文件包含在Windows窗体应用程序中。发生了许多编译器错误,例如“__declspec(dllexport)无法在singleton.hpp(boost-library)中使用/ clr:pure或/ clr:safe”。我创建了一个例子。 在Form1-header中,只有Visual Studio 2010生成的代码才包含此类,不执行任何其他操作。

这是一个测试类,我创建它是为了向您展示一个简单的案例:

#ifndef FOO_H
#define FOO_H

#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>

class Foo
{
private:
    int  name;

public:
    void setName(int name);
    int getName(void);
private:
    friend boost::serialization::access;
    template<class Archive>
    void serialize (Archive& arch, const unsigned int)
    {
        arch & BOOST_SERIALIZATION_NVP(this->name);
    }
};
#endif

我尝试将/ clr:pure切换为/ clr,编译器可以编译它,但在启动程序时出现错误。它的标题是“Debug Assertion Failed!”在exe文件中。在消息框中,您还可以阅读“Expression:_CrtIsValidHeapPointer(pUserData)” 目前我使用boost 1.52.0,但我也尝试使用boost 1.53.0。我用“bootstrap.bat”和“bjam.exe”安装了boost。

有人知道这个问题的解决方案吗?

1 个答案:

答案 0 :(得分:0)

好的,Hans Passant找到了解决方案。我为那些有同样问题并且不知道如何改变/ clr的人发布了这条路。您必须将/ clr:pure更改为/ clr。发生的错误只是暂时的错误。现在它有效。

为了使Visual Studio(2010/2012)中的/ clr:pure成为可能,您必须进入Project-tab并单击Properties。点击C / C ++&gt;&gt;一般,并从/ clr:pure到/ clr获得“公共语言运行时支持”。