0

ブーストと .net-Framework に問題があります。私は.netなしでクラスを書きました。このプロジェクトは正常に機能し、今ではクラス ファイルを Windows フォーム アプリケーションに含めています。singleton.hpp (ブースト ライブラリ) で "__declspec(dllexport) could't use with /clr:pure or /clr:safe" のような多くのコンパイラ エラーが発生しました。例を作成します。Form1 ヘッダーでは、このクラスのみがインクルードされ、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をインストールしました。

誰かがこの問題の解決策を知っていますか?

4

1 に答える 1

0

わかりました、Hans Passant が解決策を見つけました。同じ問題を抱えていて、/clr を変更する方法がわからない人のために、方法を投稿します。/clr:pure を /clr に変更する必要があります。発生したミスは一時的なものに過ぎませんでした。今では動作します。

Visual Studio (2010/2012) で /clr:pure を有効にするには、[プロジェクト] タブに移動して [プロパティ] をクリックする必要があります。C/C++>>一般をクリックして、/clr:pure から /clr への「共通言語ランタイム サポート」を選択します。

于 2013-03-29T23:37:56.850 に答える