2013-03-29 182 views
0

我遇到了boost和.net-Framework的問題。我沒有.NET編寫我的課程。這個項目運行良好,現在我將類文件包含到Windows窗體應用程序中。在singleton.hpp(一個boost庫)中出現了許多編譯器錯誤,像「__declspec(dllexport)不能用於/ clr:pure或/ clr:safe」。我創建一個例子。 在Form1-header中,只有這個類是包含的,而且沒有其他任何東西是由Visual Studio 2010生成的代碼完成的。在Windows窗體應用程序中使用boost序列化

這是一個測試類,我創建向你展示一個簡單的例子:

#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,這個編譯器可以編譯它,但在啓動程序時發生錯誤。它的標題是「Debug Assertion Failed!」在exe文件中。在消息框中,您還可以閱讀「Expression:_CrtIsValidHeapPointer(pUserData)」 此刻我使用boost 1.52.0,但我也嘗試過使用boost 1.53.0。我用「bootstrap.bat」和「bjam.exe」安裝了boost。

有人知道這個問題的解決方案嗎?

+0

您必須使用/ clr,不是純粹的。沒有人可能猜到「發生了什麼錯誤」可能意味着什麼。 –

+0

@Hans Passant哦,對不起,我認爲這不重要。這是「調試斷言失敗!」發生在exe文件中。在消息框中,您還可以讀取「Expression:_CrtIsValidHeapPointer(pUserData)」 – Fab

+0

請注意,'BOOST_SERIALIZATION_NVP'從其參數中生成元素名稱,所以名稱將是「this-> name」。我不確定xml解析器是否適用於「 - >」。改用'BOOST_SERIALIZATION_NVP(name)'或者如果它應該是完全限定的,則使用臨時的本地變量。 –

回答

0

好的,Hans Passant找到了解決方案。我發佈了一些有相同問題但不知道如何更改/ clr的人的方式。您必須將/ clr:pure更改爲/ clr。發生的錯誤只是暫時的錯誤。現在它可以工作。

要在Visual Studio(2010/2012)中使用/ clr:pure,您必須進入項目選項卡並單擊屬性。點擊C/C++ >> General和Common Language RunTime Support從/ clr:pure到/ clr。

相關問題