在Windows窗体应用程序中使用boost序列化

Using boost serialization with Windows Forms Application

本文关键字:boost 序列化 Windows 窗体 应用程序      更新时间:2023-10-16

我对boost和。net框架有一个问题。我编写的类没有。net。这个项目工作得很好,现在我将类文件包含到windows窗体应用程序中。在singleton.hpp(一个boost-library)中发生了许多编译器错误,例如"__declspec(dllexport)不能与/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:纯到/clr,这样编译器可以编译它,但是在启动程序时发生了一个错误。在exe文件中,它的标题是"Debug Assertion Failed!"在消息框中,你也可以看到"Expression: _crtisvalidheappointment (pUserData)"。目前我使用boost 1.52.0,但我也尝试过boost 1.53.0。我用"bootstrap.bat"answers"bam .exe"安装了boost。

有人知道这个问题的解决办法吗?

好了,Hans Passant找到了解决方案。我发布的方式,为一些谁有同样的问题,不知道如何改变/clr。必须将/clr:pure更改为/clr。所发生的错误只是暂时的。现在它起作用了。

要在Visual Studio(2010/2012)中更改/clr:pure,您必须进入项目选项卡并单击属性。点击C/c++>>General,将"公共语言运行时支持"从/clr:pure改为/clr。