我遇到了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。
有人知道这个问题的解决方案吗?
答案 0 :(得分:0)
好的,Hans Passant找到了解决方案。我为那些有同样问题并且不知道如何改变/ clr的人发布了这条路。您必须将/ clr:pure更改为/ clr。发生的错误只是暂时的错误。现在它有效。
为了使Visual Studio(2010/2012)中的/ clr:pure成为可能,您必须进入Project-tab并单击Properties。点击C / C ++&gt;&gt;一般,并从/ clr:pure到/ clr获得“公共语言运行时支持”。